图的最短路径算法
来源:互联网 发布:北京大学远程网络教育 编辑:程序博客网 时间:2024/05/19 17:08
最短路径问题的抽象
在网络中(带权图),求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。
- 这条路径就是两点之间的最短路径(Shortest Path)
- 第一个顶点为源点(Source)
- 最后一个顶点为终点(Destination)
最短路径问题,其实不是一个问题,而是一套问题,这一套问题至少可以分为两大类:
- 单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。
- 无权图
- 有权图
- 多源最短路径问题:求任意两顶点间的最短路径。
.
.
.
无权图的单源最短路算法
- 按照递增的顺序找出到各个顶点的最短路
- 将BFS搜索算法修改成为无权图单源最短路算法,其中dist[ W ]表示S到W的最短距离。由于dist[] 初始化时可以设置为一个特别的数,所以dist[ W ]还可以用来标识W是否已被访问过。Path[ W ],S到W的路上经过的某顶点
void BFS ( Vertex V ) { visited[ V ] = true; Enqueue( V, Q ); while ( !IsEmpty( Q ) ){ V = Dequeue( Q ); for ( V的每个邻接点W ){ if ( !visited[ W ] ){ visited[ W ] = true; Enqueue( W, Q ); } } }}
修改为:
void Unweighted( Vertex S ){ Enqueue( S, Q ); while ( !IsEmpty( Q ) ){ V = Dequeue( Q ); for ( V的每个邻接点W ){ if( dist[ W ] == -1 ){ //如果W被访问过,dist[W]显然不可能为-1 dist[ W ] = dist[ V ] + 1; path[ W ] = V; Enqueue( W, Q ); } } } }
利用Path[ ]和堆栈,可以推出S到D经过的路径。
时间复杂度:T = O(V + E)
.
.
.
.
有权图的单源最短路算法
Dijkstra算法
待续
0 0
- 图的最短路径dijkstra算法
- 图的最短路径算法
- 图的最短路径算法
- 图的最短路径-Prim算法
- 图的最短路径算法
- 图的最短路径算法
- Dijkstra算法--图的最短路径
- 图的最短路径算法
- 无权图的单源最短路径最短路径算法
- 最简单的最短路径算法
- 【图的最短路径】迪杰斯特拉算法求图的最短路径
- 图的最短路径算法(二)-任意节点最短路径
- 图的最短路径(三)-单源点最短路径(Dijkstra算法)
- 图的最短路径算法Dijkstra算法
- 图的最短路径(dijkstra算法/floyd算法)
- 【算法】图的最短路径(Dijkstra算法)
- 【算法】图的最短路径(Floyd算法)
- 最短路径算法
- 第一行代码中遇到的小问题
- char short 类型的提升
- 字符流中第一个不重复的字符
- ubuntu 软件安装
- 求多个数的最小公倍数
- 图的最短路径算法
- 【opencv练习03-Mat相关操作】
- WPF 线程
- leetcode Longgest Palindrome Substring
- HDU:1856 More is better(并查集+技巧)
- 最小生成树题集
- HDOJ 1664 Different digits
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- HDOJ 5326 Work