如何为Python上的有向图实现广度优先搜索



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

树1:a,b

树2:d,e,h

树3:.....

我的主要困难是了解如何使BFS函数在图中有几棵树,而无需重印先前访问的节点。

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

  1. 保持BFS订单的队列。
  2. 列表项目哈希表(或集合(以查找重复。

这是算法:

  1. 将图表上的初始点加入队列,也将哈希表。
  2. 如果队列不是空的
    1. 排队排队。
    2. 登上排列元素的所有邻居与队列中的所有邻居,并将其插入集合中的情况。
  3. print(/access/process(脱水元素。
  • 重复步骤2至4,直到排队用尽。
  • 您可以在线找到许多示例和优化。例如:

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

    https://en.wikipedia.org/wiki/breadth-firstrongearch

    bfs通常是通过队列完成的。处理节点时,将其孩子推到队列上。处理节点后,您可以在队列中处理下一个。

    这本质上是非恢复的。

    最新更新