水题,题目比较长,描述的题意太长。
CODE:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; #define MAXN 25 #define INF 0x3f3f3f3f int n, times; long long d[MAXN][MAXN]; void init() { for( int i = 1 ; i <= 20 ; i++) { for( int j = 1 ; j <= 20 ; j++) { if(i == j) d[i][j] = 0; else d[i][j] = INF; } } } void Floyd() { int u, v; 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]); scanf( " %d ", &n); printf( " Test Set #%d\n ", ++times); for( int i = 1 ; i <= n ; i++) { scanf( " %d%d ", &u , &v); printf( " %d to %d: %lld\n " , u , v , d[u][v]); } printf( " \n "); } int main() { int x , a; times = 0; while(~scanf( " %d ", &x)) { init(); for( int i = 1 ; i <= x ; i++) { scanf( " %d ", &a); d[ 1][a] = d[a][ 1] = 1; } for( int i = 2 ; i <= 19 ; i++) { scanf( " %d ", &x); for( int j = 1 ; j <= x ; j++) { scanf( " %d ", &a); d[i][a] = d[a][i] = 1; } } Floyd(); } return 0; }