图遍历期间断开的节点
Posted
技术标签:
【中文标题】图遍历期间断开的节点【英文标题】:Disconnected node during Graph traversal 【发布时间】:2014-11-24 11:01:20 【问题描述】:我一直在这个链接上进行广度优先遍历Breadth First Traversal
现在如果把图结构改成这样会怎样
节点 3 现在与图表断开连接。 现在使用遍历程序时,它不显示顶点 3。 有没有办法也可以显示这个顶点?
【问题讨论】:
这在您提供的链接中直接解决。搜索“示例断开连接图”。 【参考方案1】:据我了解,只要存在未访问的节点,BFS 就会继续寻找;但是,如果不这样做,BFS 只会访问初始顶点的连通分量中的节点。这似乎更像是一个定义问题,而不是一个实际的编程问题。只要存在未访问的节点,只需在未访问的节点上重新启动 BFS 实现 - 如果需要访问所有连接的组件。
【讨论】:
【参考方案2】:BFS/DFS 的许多实现都隐含地假定图是连通的。
有没有办法也可以显示这个顶点?
是的,有。如果完成 BFS 后仍有一些未访问的顶点,则将它们排入队列。
【讨论】:
【参考方案3】:如果您有所有节点的列表,您选择的图搜索算法 (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
上的代码时,第一个dfs
调用将访问节点0,1,2
,并且0,1,2
将被标记为已访问。那么当我们遇到3
的时候,由于没有被访问过,就会有另一个dfs
调用。
希望你能明白。
【讨论】:
以上是关于图遍历期间断开的节点的主要内容,如果未能解决你的问题,请参考以下文章