使用BFS,有没有一种方法可以找到所有顶点到目标顶点的距离?

Ruirui

假设我有一个简单的图A-> B-> C->D。边权重均为1。A是起始顶点,D是目标顶点。使用BFS,我可以轻松确定从A到D的距离是3。

鉴于此,我还想找到一种有效的方法来存储从B到D以及从C到D的距离,而BFS算法遍历图(从A开始到D结束)。我更喜欢将BFS与备忘录/动态编​​程等功能结合使用。

PS:我的BFS实现确定了从队列中弹出v每个顶点v的邻居因此,不可能在图表中向后移动,即从D到A。

报春花

反转所有圆弧的方向后,从A到D的距离与从D到A的距离相同。只需构建一个转置图,然后从D运行BFS,直到到达每个节点并记录距离。一些伪代码如下所示:

distances = {}
visited = {source_node}

frontier = queue([(target_node, 0)])
while !frontier.empty():
    node, distance = frontier.pop()
    distances[node] = distance
    for nei in node.neighbors:
        if nei not in visited:
            frontier.push((nei, distance + 1))
            visited.insert(nei)

最后,您将得到一个map distances,其中distances[node]node到目标顶点的距离

请注意,在BFS中,您不需要向后移动。向后走永远不会找到最短的路径,因为您要增加到达每个目标的距离。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以将原始类型的数组发送并将顶点(或面点)与OpenGL相关联?

来自分类Dev

Bing maps API:有没有一种方法可以使用卡车路线作为距离矩阵?

来自分类Dev

有没有一种方法可以记录所有DOM方法调用

来自分类Dev

有没有一种方法可以在目标描述中扩展ant属性?

来自分类Dev

有没有一种方法可以将屏幕上的按钮作为目标?

来自分类Dev

有没有一种方法可以获取子集中的所有文档

来自分类Dev

有没有一种方法可以获取所有堆userptr的userstack

来自分类Dev

有没有一种方法可以对动态创建的目标使用using语句?

来自分类Dev

有没有一种方法可以使用推力将数组的所有元素相乘?

来自分类Dev

有没有一种方法可以对类中的所有成员使用`std :: optional`

来自分类Dev

有没有一种方法可以使用核心位置在ios中找到运输模式

来自分类Dev

有没有一种方法可以在类之间使用方法?

来自分类Dev

有没有一种方法可以在类之间使用方法?

来自分类Dev

有没有一种方法可以使用Sass缩短此CSS?

来自分类Dev

有没有一种方法可以使TextView使用Spinner样式?

来自分类Dev

有没有一种方法可以解决使用break语句的问题?

来自分类Dev

有没有一种方法可以根据参数使用“新XXXX”?

来自分类Dev

有没有一种方法可以在Apache PropertiesConfiguration中使用占位符

来自分类Dev

有没有一种方法可以在Rust中使用堆栈上的集合?

来自分类Dev

有没有一种方法可以限制Software Center使用的带宽?

来自分类Dev

有没有一种方法可以使用JavaScript发送CoAP命令?

来自分类Dev

有没有一种方法可以“重置”用于非全局使用的getopt?

来自分类Dev

有没有一种方法可以使用ArrayAdapter更新多个TextView?

来自分类Dev

有没有一种方法可以在实体框架+ PostgreSql中使用ARRAY

来自分类Dev

有没有一种方法可以使用Moment JS验证时间?

来自分类Dev

有没有一种方法可以在Python中使用if语句生成“ Not a number”?

来自分类Dev

有没有一种方法可以使jQuery的.on()函数与promises配合使用?

来自分类Dev

有没有一种方法可以在Java类中使用gradle变量

来自分类Dev

有没有一种方法可以在SQL中使用“时间的开始”

Related 相关文章

  1. 1

    有没有一种方法可以将原始类型的数组发送并将顶点(或面点)与OpenGL相关联?

  2. 2

    Bing maps API:有没有一种方法可以使用卡车路线作为距离矩阵?

  3. 3

    有没有一种方法可以记录所有DOM方法调用

  4. 4

    有没有一种方法可以在目标描述中扩展ant属性?

  5. 5

    有没有一种方法可以将屏幕上的按钮作为目标?

  6. 6

    有没有一种方法可以获取子集中的所有文档

  7. 7

    有没有一种方法可以获取所有堆userptr的userstack

  8. 8

    有没有一种方法可以对动态创建的目标使用using语句?

  9. 9

    有没有一种方法可以使用推力将数组的所有元素相乘?

  10. 10

    有没有一种方法可以对类中的所有成员使用`std :: optional`

  11. 11

    有没有一种方法可以使用核心位置在ios中找到运输模式

  12. 12

    有没有一种方法可以在类之间使用方法?

  13. 13

    有没有一种方法可以在类之间使用方法?

  14. 14

    有没有一种方法可以使用Sass缩短此CSS?

  15. 15

    有没有一种方法可以使TextView使用Spinner样式?

  16. 16

    有没有一种方法可以解决使用break语句的问题?

  17. 17

    有没有一种方法可以根据参数使用“新XXXX”?

  18. 18

    有没有一种方法可以在Apache PropertiesConfiguration中使用占位符

  19. 19

    有没有一种方法可以在Rust中使用堆栈上的集合?

  20. 20

    有没有一种方法可以限制Software Center使用的带宽?

  21. 21

    有没有一种方法可以使用JavaScript发送CoAP命令?

  22. 22

    有没有一种方法可以“重置”用于非全局使用的getopt?

  23. 23

    有没有一种方法可以使用ArrayAdapter更新多个TextView?

  24. 24

    有没有一种方法可以在实体框架+ PostgreSql中使用ARRAY

  25. 25

    有没有一种方法可以使用Moment JS验证时间?

  26. 26

    有没有一种方法可以在Python中使用if语句生成“ Not a number”?

  27. 27

    有没有一种方法可以使jQuery的.on()函数与promises配合使用?

  28. 28

    有没有一种方法可以在Java类中使用gradle变量

  29. 29

    有没有一种方法可以在SQL中使用“时间的开始”

热门标签

归档