hiho 24 最短路径 二 Floyd算法
2016-01-17 16:11
316 查看
问题描述:
http://hihocoder.com/contest/hiho24/problem/1算法描述
floyd 算法可以在O(n3) 时间求出所有顶点间的最短路径。#include <cstdio> #include <cstring> #include <algorithm> //using namespace std; enum {maxn = 100+5, MINF = 1<<12}; int G[maxn][maxn]; int main() { //printf("%d\n", MINF); // freopen("in.txt", "r", stdin); int N, M; scanf("%d %d", &N, &M); for (int i=0; i<N; i++) for (int j=0; j< N; j++) if (i!= j) G[i][j] = MINF; else G[i][j] = 0; for (int i=0; i<M; i++) { int a, b, c; scanf("%d %d %d", &a, &b, &c); a--; b--; G[a][b] = G[b][a] = std::min(G[b][a], c); } for (int k = 0; k<N; k++) for (int i=0; i< N; i++) for (int j=0; j< N; j++) G[i][j] = std::min(G[i][j], G[i][k] + G[k][j]); for (int i=0; i< N; i++) { for (int j=0; j< N; j++) printf("%d ", G[i][j]); printf("\n"); } return 0; }
需要注意:
1, 最大路径值不能设置太大,要保证2*最大路径值不会溢出。
2, 数据中存在两个节点之间有多条路径,我们应该在输入时选择最小的路径。
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析