所有顶点对最短路径问题(图的应用)

医院选址:4个村庄之间的交通图如图1所示,村庄之间的距离为图中各边上的权值。现在要从这4个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院最近。

(PS:具体问题见附件)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<iostream>
using  namespace  std;
int  main(){
int  h,i,j,minn=10000;
int  a[1][4][4]={{{0,7,10000,5},{10000,0,4,10000},{6,6,0,10000},{8,10000,6,0}}},b[100][4][4]={{{0,7,10000,5},{10000,0,4,10000},{6,6,0,10000},{8,10000,6,0}}},c[4]={0};
//b数组使用三维来表示一次次的迭代结果,c数组来表示其他村子到一个村子的最远距离,[0][0]表示A->A,[0][1]表示A->B,其他类推
//以下是Floyd算法求最短路问题
for (h=0;h<100;h++){
for (i=0;i<4;i++){
for (j=0;j<4;j++){
int  k=10000;
for ( int  m=0;m<4;m++){
if (k>b[h][i][m]+a[0][m][j])
k=b[h][i][m]+a[0][m][j];
}
b[h+1][i][j]=k;
}
}
}
//其他村子到每个村子的最远距离
for (j=0;j<4;j++){
for (i=0;i<4;i++){
if (b[9][i][j]>c[j])
c[j]=b[h][i][j];
}
}
//minn表示这些最远距离中的最小值
for (i=0;i<4;i++){
if (c[i]<minn)
minn=c[i];
}
if (minn==c[0])
cout<< "建立在A村" <<endl;
else  if (minn==c[1])
cout<< "建立在B村" <<endl;
else  if (minn==c[2])
cout<< "建立在C村" <<endl;
else
cout<< "建立在D村" <<endl;
cout<< "此时距离医院最远村子到医院的距离为:" <<minn<<endl;
return  0;
}

 本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1338193,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值