【问题标题】:How does Breadth First Search find shortest path from source vertex to destination vertex?广度优先搜索如何找到从源顶点到目标顶点的最短路径?
【发布时间】:2021-03-11 17:40:38
【问题描述】:

有人告诉我,BFS 可以为您提供从源顶点到目标顶点的最短路径,这是有道理的,因为您遍历了相邻的节点。但是,我看不出这如何保证总是发生。在 BFS 伪代码逻辑中,我没有看到选择正确的相邻节点以保证具有最短路径。 BFS 可以选择任何随机的相邻节点,并最终得到从源顶点到目标顶点的较长路径。那么BFS如何给出源顶点到目的顶点的最短路径呢?

【问题讨论】:

  • 您的图表是加权的还是未加权的? BFS 只保证为您提供 未加权 图(或所有边具有相同权重的图)的最短路径。对于加权图,BFS 通常不会为您提供最短路径。

标签: algorithm graph-theory breadth-first-search


【解决方案1】:

你是对的。单独使用 BFS 并不能保证找到最短路径。

在加权图的情况下,当所有边的边权重相等时,它只会为您获取最短路径。对于未加权的图,您可以假设边权重相等。

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

感谢您的问题,这促使我想出了一个有趣的案例,在加权图的情况下,BFS 实际上可以为您获取最短路径:

当我们有一个线性加权无向图无环),即中间节点有2个相邻节点和节点有1个相邻节点的图是极端情况(如双链表),BFS 实际上可以为我们获取最短路径。

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

【讨论】:

    【解决方案2】:

    在未加权图的情况下,可以保证最终我们将使用 BFS 获得最短路径。

    但是在加权图的情况下,我们仍然可以运行 BFS 的变体,即,对相邻节点使用优先级队列(基于边的权重)。这个变种被称为Dijkstra’s algorithm

    【讨论】:

      猜你喜欢
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多