所有顶点对最短路径问题(图的应用)
2013-12-09 00:14
381 查看
医院选址:4个村庄之间的交通图如图1所示,村庄之间的距离为图中各边上的权值。现在要从这4个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院最近。(PS:具体问题见附件)
附件:http://down.51cto.com/data/2363842
#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; }
附件:http://down.51cto.com/data/2363842
相关文章推荐
- Geeks面试题:Floyd Warshall Algorithm 所有顶点之间的最短路径问题
- 图——所有顶点之间的最短路径问题-弗洛伊德算法
- 算法导论25(所有结点对的最短路径问题)
- 所有结点对最短路径问题(Floyd-Warshall算法)——算法导论学习笔记(1)
- 求无向图顶点之间的所有最短路径
- 最短路径问题 弗洛依德Floyd算法:带权图中每一对顶点间最短路径
- 所有点对的最短路径问题
- 算法导论第25章 所有结点对的最短路径问题Floyd等
- 所有顶点之间的最短路径算法:Floyd算法。
- 所有顶点对之间的最短路径之Floyd-Warshall算法
- 用栈解决迷宫问题(输出所有路径和最短路径)
- 图的应用---最短路径问题 用迪杰斯特拉算法解决 《地铁换乘问题》
- 算法导论笔记:25所有节点对的最短路径问题
- 队列应用2:求解迷宫问题,最短路径
- 实现迷宫问题的所有路径及最短路径程序
- 算法导论 所有结点最短路径问题 Johnson
- Floyd-Warshall算法求解所有结点对的最短路径问题Java实现
- 求解迷宫问题的所有路径及最短路径程序
- 最短路径算法-Dijkstra算法的应用之单词转换(词梯问题)
- 算法导论第二十五章-所有结点对的最短路径问题-Cpp代码实现