Floyd算法
算法思想
算法過程
1 2 10
1 4 30
1 5 100
2 3 50
3 5 10
4 3 20
4 5 60
1 5
60
- 算法實現
#include<iostream>
using namespace std;
#define max 1000000000
int d[1000][1000]; //記錄兩點最短距離
int path[1000][1000]; //記錄最短路徑的信息 ,可去掉
int main() {
int m, n, x, y, z;
cin>> n>> m;
for(int i= 1; i<= n; i++) {
for(int j= 1; j<= n; j++) {
d[i][j]= max;
path[i][j]= j;
}
}
for(int i= 1; i<= m; i++) {
cin>> x>> y>> z;
d[x][y]= z;
d[y][x]= z;
}
for(int k= 1; k<= n; k++) {
for(int i= 1; i<= n; i++) {
for(int j= 1; j<= n; j++) {
if(d[i][k]+ d[k][j]< d[i][j]) {
d[i][j]= d[i][k]+ d[k][j]; //更新最短路徑
path[i][j]= path[i][k];
}
}
}
}
int f, e;
cin>> f>> e;
int temp= f;
while (temp!= e) {
cout<< temp<< "->";
temp= path[temp][e];
}
cout<< e<< endl;
cout<< d[f][e]<< endl;
return 0;
}