多源最短路(floyd演算法)
阿新 • • 發佈:2018-11-21
Floyd適用無向圖和有向圖,不適用於帶負權的圖
#include<stdio.h> #include<algorithm> #include<iostream> using namespace std; int n , m; int a[105][105]; const int inf = 999999; int main(void) { int from , to , val; scanf("%d %d" , &n , &m); for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) { if(i == j) a[i][j] = 0; else a[i][j] = inf; } }//對圖進行初始化 for(int i = 1 ; i <= m ; i ++) { scanf("%d %d %d",&from,&to,&val); a[from][to] = val; }輸入邊權值 //floyd核心演算法 for(int k = 1 ; k <= n ; k ++) { for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) { if(a[i][j] > a[i][k] + a[k][j]) a[i][j] = a[i][k] + a[k][j]; } } } //輸出圖(任意兩點的最短距離) for(int i = 1 ; i <= n ; i++) { for(int j = 1 ; j <= n ; j ++) { printf("%10d",a[i][j]); } cout<<endl; } }
丟一組測試資料:
4 8
1 2 2
1 3 6
1 4 4
2 3 3
3 1 7
3 4 1
4 1 5
4 3 12