flody的入门题,最普通的模板一套就A了,记住map每次都初始化就行。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int map[21][21];
int main(void)
{
int n;
int v = 0;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<21;++i)
for(int j=1;j<21;++j)
map[i][j]=10000;
for(int i=1;i<=n;++i)
{
int a;
scanf("%d",&a);
map[1][a]=map[a][1]=1;
}
for(int i=2;i<20;++i)
{
scanf("%d",&n);
for(int e=1;e<=n;++e)
{
int a;
scanf("%d",&a);
map[i][a]=map[a][i]=1;
}
}
for(int k=1;k<=20;++k)
for(int i=1;i<=20;++i)
for(int j=1;j<=20;++j)
if(map[i][k]+map[k][j]<map[i][j])
{
map[i][j] = map[i][k]+map[k][j];
}
scanf("%d",&n);
cout<<"Test Set #"<<++v<<endl;
for(int i=1;i<=n;++i)
{
int x,y;
scanf("%d %d",&x,&y);
cout<<x<<" to "<<y<<": "<<map[x][y]<<endl;
}
cout<<endl;
}
return 0;
}