您的位置:首页 > 其它

zoj 1221 Risk

2013-09-02 16:18 405 查看
floyed 算法求最短路径,注意输入的方法,否则会超时

#include<iostream>
#include<cstring>
#include<cstdio>
#define INF 100000
#define MAX 22

using namespace std;

int map[MAX][MAX];
int num;

int main()
{
int i,j,k;
int b;
int no=1;
int org,dest;
while(cin>>num)
{
memset(map,0,sizeof(map));
while(num--)
{
cin>>b;
map[1][b]=map[b][1]=1;
}

for(i=2; i<=19; i++ )
{
cin>>num;
while(num--)
{

cin>>b;
map[i][b]=map[b][i]=1;
}
}
for(i=1; i<=20; i++)
for(j=1; j<=20; j++)
{
if(i==j) map[i][j]=0;
else if(!map[i][j]) map[i][j]=INF;
}

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];
}
cin>>num;
printf("Test Set #%d\n",no++);
while(num--){

cin>>org>>dest;
printf("%d to %d: %d\n",org,dest,map[org][dest]);
}
cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zoj