ZJU 1221 Risk (Floyd算法模板题)

题目链接http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=221

本来找这个题是要练习dijkstra的。。结果发现这个题权值都是1,可以用BFS很方便,这时又想到了Floyd 用来求每对顶点之间的距离,第一次实现了Floyd算法~!该算法代码结构简单,还没理解就先用了。下面是AC代码~  (p.s:这是我在zoj上提交的第一个代码~~)

 1 #include<stdio.h>
 2 #define INF 1000
 3 int map[110][110];
 4 int main()
 5 {
 6     int n,i,j,k,x,from,to,count=1;
 7     while(scanf("%d",&n)!=EOF)
 8     {
 9         for(i=1;i<=20;i++)   //初始化
10             for(j=1;j<=20;j++)
11                 map[i][j]=INF;
12         for(i=1;i<=n;i++)
13         {
14             scanf("%d",&x);
15             map[1][x]=1;
16             map[x][1]=1;
17         }
18         for(i=2;i<=19;i++)
19         {
20             scanf("%d",&n);
21             for(j=1;j<=n;j++)
22             {
23                 scanf("%d",&x);
24                 map[i][x]=1;
25                 map[x][i]=1;
26             }
27         }
28         for(k=1;k<=20;k++)    //floyd核心代码
29             for(i=1;i<=20;i++)
30                 for(j=1;j<=20;j++)
31                     if(map[i][j]>map[i][k]+map[k][j])
32                         map[i][j]=map[i][k]+map[k][j];
33         scanf("%d",&n);
34         printf("Test Set #%d\n",count++);
35         while(n--)
36         {
37             scanf("%d%d",&from,&to);
38             printf("%d to %d: %d\n",from,to,map[from][to]);
39         }
40         printf("\n");
41     }
42     return 0;
43 }

 

转载于:https://www.cnblogs.com/hjf007/p/3314249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值