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;
}
#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 1221 Risk
- ZOJ 1221 Risk
- ZOJ1221 && UVA567:Risk(Floyd)
- ZOJ 1221 Risk
- zoj 1221 || poj 1603 Risk(Floyd~)
- ZOJ1221 && UVA567:Risk(Floyd)
- zoj1221_Risk(多源点最短路)
- ZOJ-1221-Risk
- 【ZOJ 1221】Risk
- ZOJ 1221 Risk(最短路径Dijkstra和Floyd算法)
- zoj 1221 Risk【最短路 3种方法】
- zoj 1221 Risk 最短路 floyd
- ZOJ 1221 Risk
- zoj 1221 Risk 最短路
- zoj 1221 && poj 1603 Risk
- zoj 1221 Risk
- zoj 1221 Risk Flory
- 浙大oj 1221 Risk
- ZOJ-1221
- ZJU 1221 Risk