图遍历期间断开连接的节点

时间:2014-11-24 11:01:20

标签: c++ algorithm data-structures graph breadth-first-search

我在这个链接上经历了广度优先遍历 Breadth First Traversal

现在,如果图形结构更改为

,该怎么办?

Graph

现在节点3与图形断开连接。 当现在使用遍历程序时,它不会显示顶点3。 有没有办法我们可以显示这个顶点?

3 个答案:

答案 0 :(得分:4)

据我了解,只要存在,BFS就会继续寻找未被访问的节点;但是,如果不这样做,BFS只访问初始顶点的连通分量中的节点。这似乎更多的是定义而不是实际的编程问题;只要它们存在,只需在未访问的节点上重新启动BFS实现 - 如果需要访问所有连接的组件。

答案 1 :(得分:3)

BFS / DFS的许多实现隐含地假定图是连接的。

  

有没有办法让我们也可以显示这个顶点?

是的。如果在完成BFS后仍有一些未访问的顶点,则将它们排入队列。

答案 2 :(得分:1)

如果您有所有节点的列表,您选择的图搜索算法(DFS / BFS)将一次发现一个连接的组件。

您可以通过以下方式执行此操作。

例如,请考虑您的示例图表,其中0, 22, 01, 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来电。

希望你明白这一点。