图遍历期间断开的节点

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, 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 上的代码时,第一个dfs 调用将访问节点0,1,2,并且0,1,2 将被标记为已访问。那么当我们遇到3的时候,由于没有被访问过,就会有另一个dfs调用。

希望你能明白。

【讨论】:

以上是关于图遍历期间断开的节点的主要内容,如果未能解决你的问题,请参考以下文章

以最小成本断开无向加权图中的两个节点

如何在 node.js 断开连接期间缓冲 MongoDB 插入?

JNI - 在执行本机代码期间与目标 VM 断开连接

关于梯形图的学习

K8s 节点断开连接后,本在运行的 Pod 会如何?

处理 MongoDB 从节点断开/重新连接