【问题标题】:How to implement Breadth-First-Search non-recursively for a directed graph on python如何在python上为有向图非递归地实现广度优先搜索
【发布时间】:2024-04-21 23:45:02
【问题描述】:

我正在尝试实现一个 BFS 函数,该函数将打印使用广度优先搜索遍历访问的有向图的节点列表。该函数必须以非递归方式实现,并且必须遍历图中的所有节点,因此如果有多个树,它将按以下方式打印:

树 1:a,b

树 2:d、e、h

树 3:.....

我的主要困难是理解如何使 BFS 函数遍历所有节点,如果图有几棵树,而不重新打印以前访问过的节点。

【问题讨论】:

    标签: python breadth-first-search


    【解决方案1】:

    为简单起见,您可以使用队列以非递归方式执行 BFS。这里需要两个数据结构。

    1. 维护 BFS 顺序的队列。
    2. 列出项哈希表(或集合)以查找重复项。

    这是算法:

    1. 将图形上的初始点排入队列,然后 哈希表。
    2. 如果队列不为空
      1. 从队列中出列。
      2. 将已出队元素的所有邻居排入队列,如果集合中不存在它们,则将它们插入集合中。
      3. 打印(/access/process)出队的元素。
    3. 重复步骤 2 到 4,直到队列用完。

    您可以在网上找到许多示例和优化。例如:

    https://www.geeksforgeeks.org/breadth-first-search-or-bfs-for-a-graph/

    https://en.wikipedia.org/wiki/Breadth-first_search

    【讨论】:

      【解决方案2】:

      BFS 通常使用队列完成。当您处理一个节点时,您将其子节点推入队列。处理完节点后,您将处理队列中的下一个节点。

      这本质上是非递归的。

      【讨论】:

        最近更新 更多