动态规划之Bellman-Ford最短路径
2015-08-09 15:07
197 查看
参考程序:
http://www.java3z.com/cwbwebhome/article/article1/1359.html?id=4720
http://www.java3z.com/cwbwebhome/article/article1/1359.html?id=4720
#include<limits> #include<iostream> #include<iomanip> #include<stack> using namespace std; const int NUM = 6; void BellmanFord(int sourceVer, float cost[][NUM+1], float dis[], int path[]); float cost[NUM+1][NUM+1] = { {0,0,0,0,0,0,0}, {0,0,2,4,INT_MAX,INT_MAX,INT_MAX}, {0,INT_MAX,0,-3,1,5,INT_MAX}, {0,INT_MAX,INT_MAX,0,-4,-2,INT_MAX}, {0,INT_MAX,INT_MAX,INT_MAX,0,INT_MAX,8}, {0,INT_MAX,INT_MAX,INT_MAX,4,0,6}, {0,INT_MAX,INT_MAX,INT_MAX,INT_MAX,INT_MAX}}; int _tmain(int argc, _TCHAR* argv[]) { int source = 1; float dis[NUM+1]; int path[NUM+1]; BellmanFord( source, cost, dis, path); for(int vertex = 1; vertex<=NUM; vertex++) { if( vertex != source ) { stack<int> pathStack; cout <<"The distance from" << setw(5) << source << " to" << setw(5) << vertex << " is" << setw(5) << dis[vertex] << ", " << "The path is:" << endl; pathStack.push(vertex); int nextVer = path[vertex]; do { nextVer = path[nextVer]; pathStack.push(nextVer); }while(nextVer != source); while( !pathStack.empty() ) { cout << pathStack.top() << setw(5); pathStack.pop(); } cout << endl; } } return 0; } void BellmanFord(int sourceVer, float cost[][NUM+1], float dis[], int path[]) { for(int i = 1; i <= NUM; i++) { dis[i] = cost[sourceVer][i]; if( cost[sourceVer][i] != INT_MAX ) path[i] = sourceVer; else path[i] = -1; } for(int pathEdgeNum = 2; pathEdgeNum <= NUM-1; pathEdgeNum++) { for(int vertexNum = 1; vertexNum <= NUM; vertexNum++) { if( vertexNum!=sourceVer ) { for(int midVertexNum = 1; midVertexNum <= NUM; midVertexNum++) { if( cost[midVertexNum][vertexNum] != INT_MAX && dis[midVertexNum] != INT_MAX) { int tmpDis = dis[midVertexNum] + cost[midVertexNum][vertexNum]; if( dis[vertexNum] > tmpDis) { dis[vertexNum] = tmpDis; path[vertexNum] = midVertexNum; } } } } } } }
相关文章推荐
- web前端开发需要学习什么内容已经需要使用什么开发工具?
- html canvas 常用api基础
- hive大数据倾斜总结
- 多线程编程 实战篇 (二)
- 荷兰国旗问题
- 杰克琼斯 - 杭州 门店地址 电话
- xml文件的序列化(信息从内存写到文件里)存贮文件
- Win10累积更新KB3081424安装失败的解决方法
- Android开发往模拟器传输文件
- Android基础入门教程——4.1.3 Activity登堂入室
- Thinkpad E440安装Ubuntu 14.04遇到的问题
- 集群通信组件tribes之应用程序处理入口
- 集群通信组件tribes之应用程序处理入口
- 重复子串问题(三):输出一个字符串中出现频率最高的子串
- android中联系人以及 ContactsContract类大全
- SSM框架——使用MyBatis Generator自动创建代码
- 重庆成为新能源汽车生产基地沈阳2017年新增2990辆新能源公交车
- BZOJ 2789: [Poi2012]Letters( BIT )
- Linux之gdb调试
- android 开发如何做内存优化