Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 加权图中最短路径的BFS算法_Algorithm_Graph - Fatal编程技术网

Algorithm 加权图中最短路径的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

我正在修改单源最短路径算法,有人提到BFS不能正常工作。
但是,如果该算法像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]+边权重