【題解】ZeroJudge d536: 3. 圖形迴圈偵錯問題

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=d536
【解題想法】Floyd-Warshall algorithm

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

int a[26][26];

int main() {
    int n;
    string s;
    while (cin >> n){
        memset(a, 0x3F, sizeof(a));
        for (int i = 0; i < n; i++){
            cin >> s;
            a[s[0]-'A'][s[1]-'A'] = 1;
        }
        for (int i = 0; i < 26; i++){
            for (int j = 0; j < 26; j++){
                for (int k = 0; k < 26; k++){
                    a[j][k] = min(a[j][k], a[j][i]+a[i][k]);
                }
            }
        }
        int ans = 30;
        for (int i = 0; i < 26; i++){
            ans = min(ans, a[i][i]);
        }
        if (ans == 30) cout << 0 << "\n";
        else cout << ans << "\n";
    }
}
分享本文 Share with friends