【问题标题】:Disconnected node during Graph traversal图遍历期间断开的节点
【发布时间】:2014-11-24 11:01:20
【问题描述】:

我一直在这个链接上进行广度优先遍历
Breadth First Traversal

现在如果把图结构改成这样会怎样

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

【问题讨论】:

  • 这在您提供的链接中直接解决。搜索“示例断开连接图”。

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


【解决方案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调用。

      希望你能明白。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多