经典指数          
原因
3442
浏览数
0
收藏数
 

给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。

     举报   纠错  
 
切换
1 个答案
[ 题目分析] 该题可用求每对顶点间最短路径的FLOYD算法求解。求出每一顶点(村庄)到其它顶点(村庄)的最短路径。在每个顶点到其它顶点的最短路径中,选出最长的一条。因为有n个顶点,所以有n条, 在这n条最长路径中找出最短一条,它的出发点(村庄)就是医院应建立的村庄。    void  Hospital(AdjMatrix w,int n)     //在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。    {for (k=1;k<=n;k++)   //求任意两顶点间的最短路径       for (i=1;i<=n;i++)          for (j=1;j<=n;j++)            if (w[i][k]+w[k][j]s) s=w[i][j];         if (s<=m) {m=s; k=i;}//在最长路径中,取最短的一条。m记最长路径,k记出发顶点的下标。        Printf(“医院应建在%d村庄,到医院距离为%d\n”,i,m);        }//for }//算法结束 对以上实例模拟的过程略。在A(6) 矩阵中,各行中最大数依次是9,9,6,7,9,9。这几个最大数中最小者为6,故医院应建在第三个村庄中,离医院最远的村庄到医院的距离是6。
 
切换
撰写答案
扫描后移动端查看本题