floyd裸码

 1 //floyd
 2 
 3 #include<cstdio>
 4 
 5 #include<iostream>
 6 
 7 #include<algorithm>
 8 
 9 using namespace std;
10 
11 int Maxn=999999;
12 
13 int a[110][110];
14 
15 int main(){
16 
17     int m,n,u,v,w;
18 
19     cin>>n>>m;
20 
21     for(int i=1;i<=m;i++){
22 
23         scanf("%d%d%d",&u,&v,&w);
24 
25         if(u!=v)
26 
27             a[u][v]=a[v][u]=w;//记录无向连通图
28 
29     }
30 
31     for(int i=1;i<=n;i++)
32 
33         for(int j=1;j<=n;j++){
34 
35             if(!a[i][j]&&i!=j)
36 
37                 a[i][j]=Maxn;//没有边,权值正无穷
38 
39             if(i==j)
40 
41                 a[i][j]=0;//到自己权值0
42 
43             
44 
45         }
46 
47     for(int k=1;k<=n;k++)
48 
49         for(int i=1;i<=n;i++)
50 
51             for(int j=1;j<=n;j++)
52 
53                 a[i][j]=min(a[i][j],a[i][k]+a[k][j]);//比较经过某点与直接连通的最小值
54 
55     for(int i=1;i<=n;i++){
56 
57         for(int j=1;j<n;j++)
58 
59             printf("%d ",a[i][j]);
60 
61         printf("%d\n",a[i][n]);
62 
63     }
64 
65     return 0;

 

}

posted @ 2018-01-12 10:47  AL76  阅读(118)  评论(0编辑  收藏  举报