Bellman ford 最短路径算法

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

下表记录S到每一个节点的距离:

第一次迭代,

S->A = 4 ,由于S->A眼下为INF。因此更新MIN(S->A)为4

S->B = 6。由于S->B眼下为INF。因此更新MIN(S->B)为6

S->C=INF(表示不可达)

S->D=INF


MIN(S->S)


MIN(S->A)


MIN(S->B)


MIN(S->C)


MIN(S->D)


0


4


6


INF


INF

第二次从A開始迭代:

A->C=3。由于S->C眼下为INF,因此更新MIN(S->C)为7


MIN(S->S)


MIN(S->A)


MIN(S->B)


MIN(S->C)


MIN(S->D)


0


4


6


7


INF

第二次从B開始迭代,

B->A= -5 ,由于S->A=4 S->B=6,因此S->B->A=1 < S->A = 4。故更新MIN(S->A)=1

由于更新了S->A,而A可达点集有C,因此须要对这些可达点集进行递归:

MIN(S->C) 此时为7。而MIN(S->A)->C为1+3=4。故须要更新MIN(S->C)=4

B->D = 1。由于MIN(S->D) = INF。故MIN(S->D)需更新为7


MIN(S->S)


MIN(S->A)


MIN(S->B)


MIN(S->C)


MIN(S->D)


0


1


6


4


7

从C点開始迭代:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

C可达点集仅仅有D,由于MIN(S->D)为7,而MIN(S->C)->D为4+2=6,因此MIN(S->D)须要更新为6

得到最后结果为:


MIN(S->S)


MIN(S->A)


MIN(S->B)


MIN(S->C)


MIN(S->D)


0


1


6


4


6

时间: 2024-10-29 19:10:12

Bellman ford 最短路径算法的相关文章

18.boost Ford最短路径算法(效率低)

到某个节点最近距离                  最短路径当前节点的父节点 完整代码 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <vector> 5 #include <deque> 6 #include <boost/graph/adjacency_list.hpp> 7 //A*寻路算法 8 #include <bo

Bellman - Ford 算法解决最短路径问题

Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力不从心了,而Bellman - Ford算法可以解决这种问题. Bellman - Ford 算法可以处理路径权值为负数时的单源最短路径问题.设想可以从图中找到一个环路且这个环路中所有路径的权值之和为负.那么通过这个环路,环路中任意两点的最短路径就可以无穷小下去.如果不处理这个负环路,程序就会永远运

Bellman—Ford算法思想

---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G运行Bellman—Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路.若存在负权回路,单源点最短路径问题无解:若不存在这样的回路,算法将给出从源点s到图G的任意顶点v的最短路径值d[v] Bellman—Ford算法流程 分为三个阶段: (1)初始化:将除源点外的所有顶点

ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)

两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可以求得一点到任意一点经过一条边的最短路,遍历两次可以求得一点到任意一点经过两条边的最短路...如 此反复,当遍历m次所有边后,则可以求得一点到任意一点经过m条边后的最短路(有点类似离散数学中邻接矩阵的连通性判定) POJ1556-The Doors 初学就先看POJ2240吧 题意:求从(0,5)到

Johnson 全源最短路径算法

解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: Bellman-Ford 单源最短路径算法:时间复杂度为 O(VE),适用于带负权值情况: 对于全源最短路径问题(All-Pairs Shortest Paths Problem),可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离.例如,对每个顶点应用 Bel

Bellman-Ford 单源最短路径算法

Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年,而实际上 Edward F. Moore 也在 1957 年发布了相同的算法,因此,此算法也常被称为 Bellman-Ford-Moore 算法. Bellman-Ford 算法和 Dijkstra 算法同为解决单源最短路径的算法.对于带权有向

Floyd-Warshall 全源最短路径算法

Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Problem),其中图 G 允许存在权值为负的边,但不存在权值为负的回路.Floyd-Warshall 算法的运行时间为 Θ(V3). Floyd-Warshall 算法由 Robert Floyd 于 1962 年提出,但其实质上与 Bernad Roy 于 1959 年和 Stephen Warshal

单源最短路径算法

目录 基本性质 Bellman Ford算法 spfa(Shortest Path Faster Algorithm) 算法 Dijkstra 算法 例题练习 主要参考算法导论 基本性质 使用min_w(s,v)表示源节点s到v的最短路径长度: w(u,v)表示节点u到v的权重: u.d表示源节点s到节点u的当前路径长度: 松弛操作 relax(u,v,w) { if(u.d + w < v.d) { v.d = u.d + w; } } 三角不等式 min_w(s,v) <= min_w(s

POJ 1860 Currency Exchange (Bellman ford)

Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22405   Accepted: 8095 Description Several currency exchange points are working in our city. Let us suppose that each point specializes in two particular currencies and pe