floyd最短路径算法
#include <iostream> #include <stdio.h> #include <string> #include <vector> #include <algorithm> using namespace std; //Floyd算法 //从i到j,如果以k为中转距离小则更新 const int MAXV = 510; const int INF = 1000000000; int n,m;//n为顶点数,m为边数 int dis[MAXV][MAXV]; void Floyd() { for(int k=0;k<n;k++) { for(int i = 0;i< n;i++) { for(int j = 0;j < n;j++) { if(dis[i][k] != INF && dis[k][j] != INF && dis[i][k] + dis[k][j] < dis[i][j]) { dis[i][j] = dis[i][k] + dis[k][j]; } } } } } int main() { int u,v,w; fill(dis[0],dis[0] + MAXV*MAXV,INF); cin >> n >> m; for(int i=0;i<n;i++) { dis[i][i] = 0; } for(int i=0;i<m;i++) { cin >> u >> v >> w; dis[u][v] = w; } Floyd(); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { printf("%10d ",dis[i][j]); } cout << endl; } return 0; }