题目链接请戳 这里
解题思路
用Floyd算法
代码
#include<stdio.h> #include<string.h> #include<algorithm> #define N 25 #define INF 1e9; using namespace std; int d[N][N]; int n; void floyd() { for(int k = 1; k <= 20; k++) for(int i = 1; i <= 20; i++) for(int j = 1; j <= 20; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } int main() { int x; int tests = 0; while(scanf("%d", &x) != EOF) { for(int i = 1; i <= 20; i++) for(int j = 1; j <= 20; j++) d[i][j] = INF; tests++; for(int i = 1; i <= 19; i++) { for(int j = 1; j <= x; j++) { int u; scanf("%d", &u); d[i][u] = 1; d[u][i] = 1; } if(i != 19) scanf("%d", &x); } floyd(); printf("Test Set #%d\n", tests); scanf("%d", &n); for(int i = 1; i <= n; i++) { int a, b; scanf("%d%d", &a, &b); printf("%2d to %2d: %d\n", a, b, d[a][b]); } printf("\n"); } return 0; }