解析:题目比较难以理解,这道题是求图里任意两点的最短路的长度并且输出,用floyd算法套这题。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 22; const int INF = 0x3f3f3f3f; int d[N][N]; int n; void init() { for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { if(i == j) d[i][j] = 0; else d[i][j] = INF; } } } void floyd() { for(int k = 1; k < N; k++) { for(int i = 1; i < N; i++) { for(int j = 1; j < N; j++) { d[i][j] = min(d[i][j], d[i][k] + d[k][j]); } } } } int main() { int num ,cas = 1; while(true) { init(); int x ,y; for(x = 1; x <= 19; x++) { scanf("%d",&num); for(int i = 0; i < num; i++) { scanf("%d",&y); d[x][y] = 1; d[y][x] = 1; } } floyd(); if(scanf("%d", &n) == EOF) { break; } printf("Test Set #%d\n",cas++); for(int i = 0; i < n; i++) { scanf("%d%d",&x,&y); printf("%2d to %2d: %d\n",x,y,d[x][y]); } printf("\n"); } return 0; }