Algorithm 广度优先搜索如何找到从源顶点到目标顶点的最短路径?

Algorithm 广度优先搜索如何找到从源顶点到目标顶点的最短路径?,algorithm,graph-theory,breadth-first-search,Algorithm,Graph Theory,Breadth First Search,我被告知BFS可以为您提供从源顶点到目标顶点的最短路径,这是有意义的,因为您可以遍历相邻节点。然而,我看不出这是如何保证总是发生的。在BFS伪代码逻辑中,我看不到任何地方可以选择正确的相邻节点来保证具有最短路径。BFS可以拾取任意随机相邻节点,最终得到从源顶点到目标顶点的较长路径。那么BFS如何给出从源顶点到目标顶点的最短路径呢?你说得对。仅使用BFS不能保证找到最短路径 对于加权图,当所有边的边权重相等时,它将仅获取最短路径。对于未加权图,可以假定边权重相等 其他算法(例如Dijkstra算法

我被告知BFS可以为您提供从源顶点到目标顶点的最短路径,这是有意义的,因为您可以遍历相邻节点。然而,我看不出这是如何保证总是发生的。在BFS伪代码逻辑中,我看不到任何地方可以选择正确的相邻节点来保证具有最短路径。BFS可以拾取任意随机相邻节点,最终得到从源顶点到目标顶点的较长路径。那么BFS如何给出从源顶点到目标顶点的最短路径呢?

你说得对。仅使用BFS不能保证找到最短路径

对于加权图,当所有边的边权重相等时,它将仅获取最短路径。对于未加权图,可以假定边权重相等

其他算法(例如Dijkstra算法)采用BFS来寻找最短路径

多亏了你的问题,这促使我提出了一个有趣的案例,BFS可以在加权图的情况下为你找到最短路径:

当我们有一个线性加权无向图(具有无圈)时,即中间节点有2个相邻节点,节点有1个相邻节点的图是极端端点(类似于一个双链表),BFS实际上可以为我们获取最短路径


PS:BFS不会随机拾取任何相邻节点。相邻节点的选择取决于相邻节点在特定节点的邻接列表中的顺序。因此,这取决于您的代码实现,而不是一些随机因素。

您是正确的。仅使用BFS不能保证找到最短路径

对于加权图,当所有边的边权重相等时,它将仅获取最短路径。对于未加权图,可以假定边权重相等

其他算法(例如Dijkstra算法)采用BFS来寻找最短路径

多亏了你的问题,这促使我提出了一个有趣的案例,BFS可以在加权图的情况下为你找到最短路径:

当我们有一个线性加权无向图(具有无圈)时,即中间节点有2个相邻节点,节点有1个相邻节点的图是极端端点(类似于一个双链表),BFS实际上可以为我们获取最短路径


PS:BFS不会随机拾取任何相邻节点。相邻节点的选择取决于相邻节点在特定节点的邻接列表中的顺序。因此,这取决于您的代码实现,而不是一些随机因素。

对于未加权图,可以保证最终使用BFS获得最短路径


但在加权图的情况下,我们仍然可以运行BFS的一种变体,即使用邻居节点的优先级队列(基于边的权重)。此变量称为。

对于未加权图,可以保证最终使用BFS获得最短路径


但在加权图的情况下,我们仍然可以运行BFS的一种变体,即使用邻居节点的优先级队列(基于边的权重)。此变量称为。

您的图形是加权的还是未加权的?BFS仅保证为未加权图(或所有边权重相等的图)提供最短路径。对于加权图,BFS通常不会给出最短路径。您的图是加权的还是未加权的?BFS仅保证为未加权图(或所有边权重相等的图)提供最短路径。对于加权图,BFS通常不会给出最短路径。