最短路径算法-dijkstra
2010-12-07 22:29
267 查看
http://www.ccoder.net/C-yuyantigao/shujujiegou-suanfa/173.html
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra 算法的时间复杂度为O(n^2),间复杂度取决于存储方式,邻接矩阵为O(n^2)
算法描述:
(这里描述的是从节点1开始到各点的dijkstra算法,其中Wa->b表示a->b的边的权值,d(i)即为最短路径值)
1. 置集合S={2,3,...n}, 数组d(1)=0, d(i)=W1->i(1,i之间存在边) or +无穷大(1.i之间不存在边)
2. 在S中,令d(j)=min{d(i),i属于S},令S=S-{j},若S为空集则算法结束,否则转3
3. 对全部i属于S,如果存在边j->i,那么置d(i)=min{d(i), d(j)+Wj->i},转2
算法实现(C++):
Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。Dijkstra 算法的时间复杂度为O(n^2),间复杂度取决于存储方式,邻接矩阵为O(n^2)
算法描述:
(这里描述的是从节点1开始到各点的dijkstra算法,其中Wa->b表示a->b的边的权值,d(i)即为最短路径值)
1. 置集合S={2,3,...n}, 数组d(1)=0, d(i)=W1->i(1,i之间存在边) or +无穷大(1.i之间不存在边)
2. 在S中,令d(j)=min{d(i),i属于S},令S=S-{j},若S为空集则算法结束,否则转3
3. 对全部i属于S,如果存在边j->i,那么置d(i)=min{d(i), d(j)+Wj->i},转2
算法实现(C++):
相关文章推荐
- 最短路径算法----Dijkstra
- Dijkstra 求最短路径算法
- 【算法】最短路径之Dijkstra(II)
- 最短路径算法之 Dijkstra(迪杰斯特拉)算法
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- 【算法】Dijkstra 求最短路径算法
- 基础算法之Dijkstra最短路径
- 多路径路由算法选择(7)——最短路径算法Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson
- 最短路径--Dijkstra(狄克斯特拉)算法
- Java邻接表表示加权有向图,附dijkstra最短路径算法
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- Dijkstra 最短路径算法的一种高效率实现
- java实现图的最短路径(SP)的迪杰斯特拉(Dijkstra)算法
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- python最短路径算法,基于dijkstra
- 最短路径算法—Dijkstra(迪杰斯特拉)
- 图论-有向带权图的最短路径(Dijkstra)算法
- 最短路径-迪杰斯特拉(Dijkstra)算法