请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对松驰操作的疑问

图片描述
老师, 对图中每一条边,至少进行V-1次松驰操作,但是无向图每条边都有两个方向,所以我脑海中是认为2*(V-1)次松驰操作
才能确定从源s点到图中其它点的最短距离

正在回答

1回答

bellman-ford 算法需要 V - 1 轮松弛操作,这是和整张图中有多少边无关。整张图中有多少边,影响的是每一轮松弛操作要处理多少内容(每轮松弛操作要将所有的边松弛一遍。)


之所以进行 V - 1 次操作,是因为最短路最多只能经过 V 个顶点(即图中每个顶点都走一次)。


是的,对于无向图,在每一轮松弛操作中,每一条边的两个方向都要松弛。我们的代码也没有问题:https://git.imooc.com/coding-370/Play-with-Graph-Theory-Algorithm/src/master/12-Shortest-Path/08-Bellman-Ford-Algorithm/src/BellmanFord.java


在 22-23 这两重循环中,我们会将每一条边的两个方向取出来。这是因为对于我们的无向图存储,对于 v-w 这条边,g[v] 中会有 w,g[w] 中会有 v,对应我们建图代码的 41-42 行:https://git.imooc.com/coding-370/Play-with-Graph-Theory-Algorithm/src/master/12-Shortest-Path/08-Bellman-Ford-Algorithm/src/WeightedGraph.java


继续加油!:)

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信