医院选址: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,如需转载请自行联系原作者