标签:floyd
题目连接:点击打开链接
解题思路:
全源最短路Floyd算法,初始化时对角线为0,其余位置为无穷远。
完整代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; int n , m; const int maxn = 1111; int g[maxn][maxn]; const int INF = 1000000000; void floyd() { for(int k = 1 ; k <= n ; k ++) { for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) { g[i][j] = min(g[i][j] , g[i][k] + g[k][j]); } } } } int main() { #ifdef DoubleQ freopen("in.txt" , "r" , stdin); #endif while(cin >> n >> m) { for(int i = 1; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) { if(i == j) g[i][j] = 0; else g[i][j] = INF; } } int u , v , l; for(int i = 0 ; i < m ; i ++) { cin >> u >> v >> l; if(g[u][v] != 0 && g[u][v] > l) { g[u][v] = l; g[v][u] = l; } else if(g[u][v] == 0) { g[u][v] = l; g[v][u] = l; } } floyd(); for(int i = 1 ; i <= n ; i ++) { for(int j = 1 ; j <= n ; j ++) { printf("%d%s" , g[i][j] , j == n ? "\n" : " "); } } } }
标签:floyd
原文地址:http://blog.csdn.net/u013447865/article/details/44871389