【问题标题】:How do I return the length of the path found by Breadth First Search?如何返回广度优先搜索找到的路径长度?
【发布时间】:2022-11-10 12:07:27
【问题描述】:

我正在尝试增强典型的 BFS 算法以返回它找到的路径的长度。这是我到目前为止所写的:

from collections import deque
length = 1
visited = set()
q = deque()
visited.add("Start")
while q:
    v = q.popleft()
    length += 1
    if v == "End":
        return length
    else:
        for neighbor in graph[v]:
            if neighbor not in visited:
                visited.add(neighbor)
                q.append(neighbor)

return 0

在这里,我假设一个字符串图。一个示例图可以是

graph = { "Start" : ["A"],
          "A" : ["B"],
          "B" : ["End"],
          "End" : []
          }

我知道这是错误的,因为它会计算图形的整个大小,而不仅仅是目标路径的长度。如何修改它以将路径的长度返回到它找到的目标?

【问题讨论】:

  • 尝试将“从起点到此节点的距离”信息与每个节点相关联。有很多方法可以做到这一点。例如,在队列中保留 (node, distance) 的元组;或使用该信息构建一个单独的字典(将节点映射到它们的距离)。无论哪种方式,随着算法的进展,保持这些信息更新应该很简单。
  • 我只是想评论你上传的代码,如果不是def,你怎么能返回?并且循环不能以空双端队列开始。请更正它,以便其他人可以调试您的代码想法

标签: python breadth-first-search


【解决方案1】:

根据@Karl Knechtel 的建议,我能够写出来!

from collections import deque
visited = set()
q = deque([("Start", 0)])
visited.add("Start")
while q:
    v, length = q.popleft()
    if v == "End":
        return length + 1
    else:
        for neighbor in graph[v]:
            if neighbor not in visited:
                visited.add(neighbor)
                q.append((neighbor, length + 1))

return 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2011-01-31
    相关资源
    最近更新 更多