//求所有节点之间的最短路
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 21
int x,j;
int n,a,b;
int T;
int dist[MAXN][MAXN];
void Floyd()
{
for(int k = 1; k <= 20; k++)
{
for(int i = 1; i <= 20; i++)
{
for(int j = 1; j <= 20; j++)
{
if(dist[i][j] > dist[i][k] + dist[k][j])
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}
int main()
{
T = 0;
while(cin>>x)
{
memset(dist,10000,sizeof(dist));
while(x--)
{
cin>>j;
dist[1][j] = 1;
dist[j][1] = 1;
}
for(int i = 2; i <= 19; i++ )
{
cin>>x;
while(x--)
{
cin>>j;
dist[i][j] = dist[j][i] = 1;
}
}
Floyd();
cin>>n;
cout<<"Test Set #"<<++T<<endl;
while(n--)
{
cin>>a>>b;
cout<<a<<" to "<<b<<": "<<dist[a][b]<<endl;
}
cout<<endl;
}
return 0;
}
poj 1603 Floyd
最新推荐文章于 2021-09-15 19:35:59 发布