【題解】TIOJ 1212 . 圖論 之 最小圈測試

【題目敘述】https://tioj.ck.tp.edu.tw/problems/1212
【解題想法】Floyd-Warshall shortest path

#include <iostream>
#include <cstring>
using namespace std;

int n, m, dis[505][505], a, b;

int main() {
    while (cin >> n >> m){
        if (n == 0) break;
        memset(dis, 0x3F, sizeof(dis));
        for (int i = 0; i < m; i++){
            cin >> a >> b;
            dis[a][b] = 1;
        }
        for (int k = 1; k <= n; k++){
            for (int i = 1; i <= n; i++){
                for (int j = 1; j <= n; j++){
                    if (dis[i][k]+dis[k][j] < dis[i][j]) dis[i][j] = dis[i][k]+dis[k][j];
                }
            }
        }
        int mn = 1000;
        for (int i = 1; i <= n; i++){
            mn = min(mn, dis[i][i]);
        }
        if (mn == 1000) cout << 0 << "\n";
        else cout << mn << "\n";
    }
}
分享本文 Share with friends