您的位置:首页 > 其它

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, 数据中存在两个节点之间有多条路径,我们应该在输入时选择最小的路径。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法