https://cn.vjudge.net/problem/22152/origin
主要涉及Floyd算法,做题时要注意输出格式。
#include<stdio.h>
#define INF 0x3f3f3f3f
int map[30][30];
void F()
{
int i,j,k;
for(k=1; k<=20; k++)
for(i=1; i<=20; i++)
for(j=1; j<=20; j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
int main()
{
int n,k=0;
while(~scanf("%d",&n))
{
int i,j,x,y,a,b;
for(i=1; i<=20; i++)
for(j=1; j<=20; j++)
if(i==j)
map[i][i]=0;
else map[i][j]=INF;
while(n--)
{
scanf("%d",&x);
map[1][x]=map[x][1]=1;
}
for(i=2; i<=19; i++)
{
scanf("%d",&n);
while(n--)
{
scanf("%d",&x);
map[i][x]=map[x][i]=1;
}
}
F();
printf("Test Set #%d\n",++k);
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d %d",&a,&b);
printf("%2d to %2d: %d\n",a,b,map[a][b]);
}
printf("\n");
}
return 0;
}