我在这个链接上经历了广度优先遍历 Breadth First Traversal
现在,如果图形结构更改为
,该怎么办?
现在节点3与图形断开连接。 当现在使用遍历程序时,它不会显示顶点3。 有没有办法我们可以显示这个顶点?
答案 0 :(得分:4)
据我了解,只要存在,BFS就会继续寻找未被访问的节点;但是,如果不这样做,BFS只访问初始顶点的连通分量中的节点。这似乎更多的是定义而不是实际的编程问题;只要它们存在,只需在未访问的节点上重新启动BFS实现 - 如果需要访问所有连接的组件。
答案 1 :(得分:3)
BFS / DFS的许多实现隐含地假定图是连接的。
有没有办法让我们也可以显示这个顶点?
是的。如果在完成BFS后仍有一些未访问的顶点,则将它们排入队列。
答案 2 :(得分:1)
如果您有所有节点的列表,您选择的图搜索算法(DFS / BFS)将一次发现一个连接的组件。
您可以通过以下方式执行此操作。
例如,请考虑您的示例图表,其中0, 2
,2, 0
和1, 2
之间有4个节点和边,节点3
没有传入或传出边。
您将拥有节点列表{0, 1, 2, 3}
要发现所有连接的组件,您可以执行以下操作:
Initialize visited array. Set all nodes to false
for node in list:
if not visited: dfs(node)
其中dfs
以通常的方式实现。当您在我们的列表{0,1,2,3}
上运行代码时,第一个{0,1,2}
调用将访问节点dfs
,并将0,1,2
标记为已访问。然后,当我们遇到3
时,由于没有访问过,会有另一个dfs
来电。
希望你明白这一点。