每对顶点间的最短路径——Floyd算法
来源:互联网 发布:客户结构优化 编辑:程序博客网 时间:2024/06/04 18:52
代码实现很简单,但是这个算法的思想是动态规划,所以个人感觉理解不是很好理解,反正我写了N多次还是时常犯嘀咕,晕头。
代码:
#include<iostream>#include<fstream>using namespace std;int graph[101][101];int path[101][101];int size;void floyd(){for(int i=1;i<=size;i++){for(int j=1;j<=size;j++)if(i!=j)path[i][j]=i;elsepath[i][j]=-1;}for(int k=1;k<=size;k++){for(int i=1;i<=size;i++){if(i!=k)for(int j=1;j<=size;j++){if(j!=k&&j!=i&&graph[i][j]>graph[i][k]+graph[k][j]){graph[i][j]=graph[i][k]+graph[k][j];path[i][j]=path[k][j];}}}}}void showPath(int i,int j){if(i==path[i][j]){cout<<i<<"->";return;}else{showPath(i,path[i][j]);showPath(path[i][j],j);}}int main(){ifstream in;in.open("graph.txt",ios::in);in>>size;for(int i=1;i<=size;i++){for(int j=1;j<=size;j++){in>>graph[i][j];}}in.close();floyd();ofstream out;out.open("result.txt",ios::out);out<<"Cost:"<<endl;for(int i=1;i<=size;i++){for(int j=1;j<=size;j++){out<<graph[i][j]<<"\t";}out<<endl;}out<<endl;out<<"Path"<<endl;for(int i=1;i<=size;i++){for(int j=1;j<=size;j++){out<<path[i][j]<<"\t";}out<<endl;}int s,d;cout<<"Input s and d"<<endl;cin>>s>>d;while(s!=0&&d!=0){showPath(s,d);cout<<d<<endl;cin>>s>>d;}return 0;}
- 每对顶点间的最短路径——Floyd算法
- 每对顶点的最短路径 : Floyd-Warshall 算法
- 每对顶点间的最短路径之二——floyd warshall
- 每对顶点间的最短路径之二——floyd warshall 收藏
- 每对顶点之间的最短路径-Floyd
- 第十二周——项目一—最短路径(4)Floyd算法验证(每对顶点之间的最短路径)
- 【动态规划】每对顶点之间的最短路径之Floyd-Warshall算法
- Floyd(弗洛伊德算法)---每对顶点的最短路径---《数据结构》严蔚敏
- 第十三周 每对顶点之间的最短路径(Floyd算法)
- 图——每对顶点之间的最短路径 ——弗洛伊德算法
- 每对顶点的最短路径 : 基本算法
- 每对顶点的最短路径 : Johnson 算法
- 算法导论学习笔记(19)——每对顶点间的最短路径(基于Floyd_Warshall算法)
- 每一对顶点的最短路径(Floyd算法)
- 第25章:每对顶点间的最短路径—基于矩阵乘法的动态规划算法
- 每对结点之间的最短路径——Floyd算法
- 每对顶点间的最短路径之一
- 每对顶点间的最短路径之一 收藏
- Android之网络学习资源汇集(更新)
- jquery实现无限滚动瀑布流实现原理
- Android 开发中用到的几个多线程解析(代码示例)
- Cocos2d-x--新建Cocos2d-x项目出现的问题--系统无法启动程序,系统找不到指定的路径
- Ubuntu 安装字体方法
- 每对顶点间的最短路径——Floyd算法
- XCode的一些调试技巧
- 嵌入式开发20年经验
- 216 - Getting in Line
- BAT 批处理脚本
- 中断处理
- poj 3067 Japan(线段树 | 树状数组)
- Objective-C: delegate的那点事儿
- Oracle的Long Raw的读取与存储