一、单源最短路径问题
我们知道,单源最短路径问题:已知图G=(V,E),要求找出从某个定源顶点s<-V,到每个v<-V的最短路径。简单来说,就是一个图G中,找到一个定点s,然后以s为起点,要求找出s到图G中其余各个点的最短距离或路径。
此单源最短路径问题有以下几个变形:
I、单终点最短路径问题:每个顶点v到指定终点t的最短路径问题。即单源最短路径问题的相对问题。
II、单对顶点最短路径问题:给定顶点u和v,找出从u到v的一条最短路径。
III、每对顶点间最短路径问题:针对任意每俩个顶点u和v,找出从u到v的最短路径。最简单的想法是,将每个顶点作为源点,运行一次单源算法即可以解决这个问题。当然,还有更好的办法,日后在本博客内阐述。
二、Bellman-Ford算法
1、回路问题
一条最短路径不能包含负权回路,也不能包含正权回路。一些最短路径的算法,如Dijkstra算法,要求图中所有的边的权值都是非负的。如在公路地图上,找一条从定点s到目的顶点v的最短路径问题,请参考 Dijkstra算法求解图论中的单源最短路径问题 。
2、Bellman-Ford算法
而Bellman-Ford算法,则允许输入图中存在负权边,只要不存在从源点可达的负权回路,即可。简单的说,图中可以存在负权边,但此条负权边,构不成负权回路,不影响回路的形成。且,Bellman-Ford算法本身,便是可判断图中是否存在从源点可达的负权回路,若存在负权回路,算法返回FALSE,若不存在,返回TRUE。有关 Bellman-Ford算法的详细解释,可以参考 Bellman_Ford算法单源最短路径。
还有更多关于单源最短路径算法的源码和设计可以在以下链接中找到:
这些资源不仅能帮助你更好地理解单源最短路径问题,还能提供具体的代码示例和实现方法,让你在实践中掌握这一重要的算法。是不是很有趣?赶快去试试吧!
暂无评论