我正在尝试实现一个BFS函数,该函数将打印出使用广度优先搜索遍历访问的有向图的节点列表。该函数必须非审查实现,并且必须穿过图中的所有节点,因此,如果有多个树,它将以以下方式打印:
树1:a,b
树2:d,e,h
树3:.....
我的主要困难是了解如何使BFS函数在图中有几棵树,而无需重印先前访问的节点。
为简单起见,您可以使用队列非递归执行BFS。您需要两个数据结构。
- 保持BFS订单的队列。
- 列表项目哈希表(或集合(以查找重复。
这是算法:
- 将图表上的初始点加入队列,也将哈希表。
- 如果队列不是空的
- 排队排队。
- 登上排列元素的所有邻居与队列中的所有邻居,并将其插入集合中的情况。
- print(/access/process(脱水元素。
您可以在线找到许多示例和优化。例如:
https://www.geeksforgeeks.org/breadth-first-first-search-or-bfs-for-a-graph/
https://en.wikipedia.org/wiki/breadth-firstrongearch
bfs通常是通过队列完成的。处理节点时,将其孩子推到队列上。处理节点后,您可以在队列中处理下一个。
这本质上是非恢复的。