最短路徑-floyd算法
阿新 • • 發佈:2018-10-03
turn def mes str pac using 路徑 ems include
floyd大神發明的算法?
挺難理解的。
源代碼
#include <cstdio> #include <cstring> using namespace std; #define INF 0x3f3f3f3f int dist[105][105]; int n; void Floyd() { for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(dist[i][k] + dist[k][j] < dist[i][j]) dist[i][j] = dist[i][k]+dist[k][j]; } int main() { int m, x, y, z; while(~scanf("%d%d",&n, &m)) { memset(dist, INF, sizeof dist); for(int i=0; i<=n; i++) dist[i][i] = 0; for(int i=0; i<m; i++) { scanf("%d%d%d", &x, &y, &z); if(z < dist[x][y]) dist[x][y] = dist[y][x] = z; } Floyd(); for(int i=1; i<=n; i++) { for(int j=1; j<n; j++) printf("%d ", dist[i][j]); printf("%d\n",dist[i][n]); } } return 0; }
最短路徑-floyd算法