【題目敘述】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";
}
}