您的位置:首页 > 其它

图的最短路径问题-Floyd算法-07-图4 哈利·波特的考试

2017-05-25 10:44 477 查看
题目

07-图4 哈利·波特的考试 (25分)

分析

这道题就是一个多源有权无向图的最短路径问题,就是求出每个结点的最短路径,并得到其中的最小值。

这儿的结点数比较少(N<=100),所以我们可以采用简单的邻接矩阵表示,并采用Floyd算法来求解。

我的代码

#include<iostream>
using namespace std;

#define INFINITY 123456
#define MAXN 101

int Graph[MAXN][MAXN];
int dist[MAXN][MAXN];
int N,M;

//Floyd算法求最短路径
void Flody()
{
int k,i,j;
for(k=1; k<=N; k++){
for(i=1; i<=N; i++){
for(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()
{
#ifndef ONLINE_JUDGE
freopen("hali.txt","r",stdin);
#endif

int i, j, x, y, weight;

scanf("%d%d", &N, &M);

//初始化图数组
for(i=1; i<=N; i++){
for(j=1; j<=N; j++){
if(i == j)  Graph[i][j] = 0;
else        Graph[i][j] = INFINITY;
}

}
//读取数据
for(i=1; i<=M; i++){
scanf("%d%d%d", &x, &y, &weight);
Graph[x][y] = weight;
Graph[y][x] = weight;
}

//初始化距离数组
for(i=1; i<=N; i++){
for(j=1; j<=N; j++){
dist[i][j] = Graph[i][j];
}

}

Flody();

int minAnimal = -1, minDist = INFINITY;
for(i=1; i<=N; i++){
int tmp = 0;
for(j=1; j<=N; j++){
if(dist[i][j] > tmp)    tmp = dist[i][j];
}

if(tmp == INFINITY){
printf("0\n");
return 0;
}
//printf("%d\n",i);
if(tmp < minDist){
minAnimal = i;
minDist = tmp;
}
}
printf("%d %d\n", minAnimal, minDist);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息