弗洛伊德算法(floyed)

核心五行,基于已有的矩阵,解决多源最短路径问题,可以解决负权问题

最简单的一种,直接上代码

 1 #include <iostream>
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 const int inf=0x3f3f3f3f;
 5 const int maxn=10001;
 6 int dis[maxn][maxn];
 7 int n,m,u,v,w;
 8 void floyed()
 9 {
10     for(int k=1;k<=n;k++)
11     {
12         for(int i=1;i<=n;i++)
13         {
14             for(int j=1;j<=n;j++)
15             {
16                 if(dis[i][j]>dis[i][k]+dis[k][j])
17                 dis[i][j]=dis[i][k]+dis[k][j];
18             }
19         }
20      } 
21 }
22 int main()
23 {
24     cin>>n>>m;
25     for(int i=1;i<=n;i++)
26     {
27         for(int j=1;j<=n;j++)
28         {
29             if(i==j)
30             dis[i][j]=0;
31             else
32             dis[i][j]=inf;
33         }
34     }
35     for(int i=1;i<=m;i++)
36     {
37         cin>>u>>v>>w;
38         dis[u][v]=w;
39     }
40     floyed();
41     for(int i=1;i<=n;i++)
42     {
43         for(int j=1;j<=n;j++)
44         {
45             cout<<dis[i][j]<<" ";
46         }
47         cout<<endl;
48     }
49     return 0;
50 }

 

posted @ 2022-05-01 16:27  格蕾  阅读(172)  评论(0)    收藏  举报