Algorithm 加权图中最短路径的BFS算法
我正在修改单源最短路径算法,有人提到BFS不能正常工作。Algorithm 加权图中最短路径的BFS算法,algorithm,graph,Algorithm,Graph,我正在修改单源最短路径算法,有人提到BFS不能正常工作。 但是,如果该算法像dijkstra一样使用dist[node]而不是visit[node],它难道不能正常工作吗,我在确定这个算法的复杂度时也遇到了问题不,它不能正常工作。BFS和Dijkstra算法的定义属性是探索新节点的顺序 在BFS中,根据节点与源的未加权距离发现节点。 这会导致在“更新”一些以前探索过的节点后无法找到最短路径。例如: v1--1-->v2--1-->v3--1-->v4--1-->v5--1
但是,如果该算法像dijkstra一样使用dist[node]而不是visit[node],它难道不能正常工作吗,我在确定这个算法的复杂度时也遇到了问题不,它不能正常工作。BFS和Dijkstra算法的定义属性是探索新节点的顺序 在BFS中,根据节点与源的未加权距离发现节点。 这会导致在“更新”一些以前探索过的节点后无法找到最短路径。例如:
v1--1-->v2--1-->v3--1-->v4--1-->v5--1-->v6
| ^
V |
--------------100---------------
在BFS中,即使使用您的解决方案,发现和更新成本的顺序也是:
v1:0
v2:1
v5:100
v3:2
v6:101
v4:3
v5:(update): 5
但请注意,现在v6没有正确的值
如果您想进一步调整此解决方案,并使每次“更新”触发重新触发所有邻居-这将大大增加探索成本,因为您不再受| V |+| E |的限制,事实上可能会导致非常低效的算法。对不起,什么?使用dist[node]而不是visit[node]是什么意思?在不做其他更改的情况下,不能在算法中用数字任意替换布尔值。Dijkstra's是BFS的推广。BFS不适用于具有非负边权重的一般图,因为它忽略边权重。你编写过dijkstra代码吗?它使用距离而不是布尔,当dist[now]+边权重