50148155HYF旅游

 

试题描述
放假了,我们的HYF(邹忌)同学准备去一些城市旅游,有些城市有公路,有些则没有。为了节省经费以及方便计划旅程,邹忌希望在出发前知道任意两个城市之间的最短路。
输入
第一行,包含一个正整数n,表示有n个城市。接下来n行,每行有n个数,一个n*n的矩阵mat,其中mat[i][j]表示城市i到城市j的距离。若mat[i][j]=-1,表示城市i与j没有公路
输出
n行,每行有n个数,一个n*n的矩阵mat,其中mat[i][j]表示城市i到城市j的最短距离。
输入示例
4
0 2 6 4
-1 0 3 -1
7 -1 0 1
5 -1 12 0
输出示例
0 2 5 4
9 0 3 4
6 8 0 1
5 7 10 0
其他说明
n<=200
 

最最经典的Floyd例题。最短路径中比较好理解的一种,就是时间复杂度较高。

适用于多源最短路(多个起点)

 1 //Floyd 
 2 #include <iostream>
 3 
 4 using namespace std;
 5 int mat[201][201];
 6 int main()
 7 {
 8     int n;
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++)
11         for(int j=1;j<=n;j++)
12         {
13             scanf("%d",&mat[i][j]);
14             if(mat[i][j]==-1) mat[i][j]=99999999;   //正无穷,具体大小因题而异(也别太大,注意两个相加后爆掉,变成负数) 
15         }
16     for(int k=1;k<=n;k++)
17         for(int i=1;i<=n;i++)
18             for(int j=1;j<=n;j++) mat[i][j]=min(mat[i][j],mat[i][k]+mat[k][j]); 
19     for(int i=1;i<=n;i++)
20     {
21         for(int j=1;j<=n;j++)
22         {
23             if(j==1) printf("%d",mat[i][j]);
24             else printf(" %d",mat[i][j]);
25         }
26         printf("\n");
27     }
28     //system("pause");
29     return 0;
30 }
50148155HYF旅游

 

转载于:https://www.cnblogs.com/YXY-1211/p/5714668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值