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

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

(PS:具体问题见附件)

#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;
}

 

你可能感兴趣的:(图,最短路,floyd)