dijkstra求多条最短路径(附源码)
来源:互联网 发布:二维码扫描软件ios 编辑:程序博客网 时间:2024/06/06 18:00
源码参见github:https://github.com/silenceMg/multiShortestPath
手绘了半天图实在是没精力对dijkstra做基本介绍了,本文默认大家对dijkstra已经有了基本的了解。然后就是看图说话了:
1.原始的图,圆圈中的数字代表节点编号
2.接下来是多条最短路径dijkstra算法的运行过程图解,圆圈中第一个数字是走到当前节点时花费的cost总和,代码中记为costTillNow,后面括号中的数表示当前节点的所有前向节点(大家比照着上面的原图看,这里因为空间原因不能给每个节点标号了)。绿色多边形表示集合S,绿色多边形之外的节点表示优先队列中的节点,整个dijkstra就是把队列中的节点pop到集合S中的过程。测试用例附在源代码中。
打红叉的地方表示这条边加上4 > 6, 所以不会走这条边,体现在源代码中就是:
//两个if完成松弛操作if ((it.second->costTillNow + iter.second) < relaxMap[iter.first]->costTillNow) {relaxMap[iter.first]->costTillNow = it.second->costTillNow + iter.second;//松弛节点,下一个节点的costTillNow = 当前节点的costTillNow + 二者之间边的costrelaxMap[iter.first]->prev.clear();relaxMap[iter.first]->prev.push_back(it.first);//指向前节点,记录路径,这里是求多条路径的关键点,用vector来存储多个前向节点} else if ((it.second->costTillNow + iter.second )== relaxMap[iter.first]->costTillNow) {relaxMap[iter.first]->prev.push_back(it.first);}
3.用dfs逆向回溯路径:
0 0
- dijkstra求多条最短路径(附源码)
- 求最短路径(dijkstra)
- 单源最短路径(Dijkstra)
- 最短路径Dijkstra算法源码
- Dijkstra(单源最短路径问题)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(Dijkstra算法)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(求单源最短路径)
- DijKstra算法(单源最短路径)
- JAVA中ArrayList的用法
- Centos7.2 安装zabbix3.X
- hibernate中的多对多
- hive的基本操作(重点)
- 程序员应该具备的十个项目习惯
- dijkstra求多条最短路径(附源码)
- php复习 第三天 自定义函数
- UVA 10465 0-1背包(无限) (DAG动态规划)
- flume配置及案例
- JavaScript基础学习笔记(菜鸟必看篇)
- 布隆过滤器(Bloom Filter)的原理
- 剑指Offer(面试题40~42)
- 今年在影院看的电影。。
- 关于单选框传值到input内小结(循环可用)