最短路 Floyd()
Posted 0424lrn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最短路 Floyd()相关的知识,希望对你有一定的参考价值。
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int N = ???; 5 const int INF = 0x3f3f3f3f; 6 int n, m; 7 int a, b, x; 8 int dis[N][N]; 9 10 void Floyd(){ 11 for(int k=0; k<n; k++) 12 for(int i=0; i<n; i++) 13 for(int j=0; j<n; j++) 14 //选择从i到j的最短路 ( 比较当前知道的i到j的最短距离 与 从i到k再到j的距离) 15 dis[i][j] = min(dis[i][j],dis[i][k]+dis[k][j]); 16 } 17 18 int main() 19 { 20 while(scanf("%d %d",&n,&m)!=EOF){ 21 //初始化 22 for(int i=0; i<n; i++){ 23 for(int j=0; j<n; j++) 24 dis[i][j] = INF; 25 dis[i][j] = 0; 26 } 27 //输入两点距离 28 for(int i=0; i<m; i++){ 29 scanf("%d %d %d", &a, &b, &x); 30 x = min(dis[a][b], x); 31 dis[a][b] = dis[b][a] = x; 32 } 33 // 34 Floyd(); 35 // 36 int S,T; 37 scanf("%d %d",&S,&T); 38 if(dis[S][T]==INF) printf("-1 "); 39 else printf("%d ",dis[S][T]); 40 } 41 42 }
以上是关于最短路 Floyd()的主要内容,如果未能解决你的问题,请参考以下文章