醫院選址: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
<code>#include<iostream></code>
<code>using</code> <code>namespace</code> <code>std;</code>
<code>int</code> <code>main(){</code>
<code>int</code> <code>h,i,j,minn=10000;</code>
<code>int</code> <code>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};</code>
<code>//b數組使用三維來表示一次次的疊代結果,c數組來表示其他村子到一個村子的最遠距離,[0][0]表示A->A,[0][1]表示A->B,其他類推</code>
<code>//以下是Floyd算法求最短路問題</code>
<code>for</code><code>(h=0;h<100;h++){</code>
<code>for</code><code>(i=0;i<4;i++){</code>
<code>for</code><code>(j=0;j<4;j++){</code>
<code>int</code> <code>k=10000;</code>
<code>for</code><code>(</code><code>int</code> <code>m=0;m<4;m++){</code>
<code>if</code><code>(k>b[h][i][m]+a[0][m][j])</code>
<code>k=b[h][i][m]+a[0][m][j];</code>
<code>}</code>
<code>b[h+1][i][j]=k;</code>
<code>//其他村子到每個村子的最遠距離</code>
<code>if</code><code>(b[9][i][j]>c[j])</code>
<code>c[j]=b[h][i][j];</code>
<code>//minn表示這些最遠距離中的最小值</code>
<code>if</code><code>(c[i]<minn)</code>
<code>minn=c[i];</code>
<code>if</code><code>(minn==c[0])</code>
<code>cout<<</code><code>"建立在A村"</code><code><<endl;</code>
<code>else</code> <code>if</code><code>(minn==c[1])</code>
<code>cout<<</code><code>"建立在B村"</code><code><<endl;</code>
<code>else</code> <code>if</code><code>(minn==c[2])</code>
<code>cout<<</code><code>"建立在C村"</code><code><<endl;</code>
<code>else</code>
<code>cout<<</code><code>"建立在D村"</code><code><<endl;</code>
<code>cout<<</code><code>"此時距離醫院最遠村子到醫院的距離為:"</code><code><<minn<<endl;</code>
<code>return</code> <code>0;</code>
本文轉自 pangfc 51CTO部落格,原文連結:http://blog.51cto.com/983836259/1338193,如需轉載請自行聯系原作者