【问题标题】:Enumerating Sets of Nodes of an Undirected / unweighted graph枚举无向/未加权图的节点集
【发布时间】:2012-12-23 15:31:54
【问题描述】:

在无向无权图上,如何枚举所有长度为 1,2,..,n 的连接节点组(n 是用户定义的值)?

这个问题和这个one类似;有这个区别: 对于 n=3;我还需要找到路径:A-B-C 和 C-E-F。

如果 n 为 4,则路径还应包括:

A-B-C-D

A-B-C-E

A-B-C-F

A-C-E-F

我想这是一个类似的问题; “所有对 - 所有路径”,其中每条路径最多可以包含 n 个节点。 能否请您也说说这些方法的计算复杂度?

我的想法是我需要同时使用DFS和BFS,但我不确定这是否有效?

【问题讨论】:

    标签: algorithm graph path enumeration


    【解决方案1】:

    您基本上可以将 DFS 与一个额外的变量一起使用,该变量通过length 的递归向下传递,每次迭代都会减少该变量。停止条件将是这个额外变量达到 0 时。

    类似的东西:

    DFS(source,length,path):
       print path //this is always done, because we want all paths up to n
       if (length == 0): //stop clause
          return
       for each (source,u) is an edge:
           path.append(u)
           DFS(u,length-1,path)
           path.removeLast() //clean up environment
    

    另一个(效率较低,但可能更优雅)正在做一个Iterative Deepening DFS,长度=1,2,...,n(并且只将打印放在停止子句中)

    【讨论】:

    • 感谢您的回复。你能告诉你 path.removeLast() 是什么意思吗?
    • @user1959766:这里path 是一个列表,path.removeLast() 从中删除最后一个元素。 path.append(u)u 添加到列表末尾
    • 谢谢。但是,我认为问题仍然存在:随着最后一个元素被删除,我们也丢失了一些节点集。在给出的示例中,如果我们删除 B,如何检测到节点 A-B-C 组?
    • @user1959766:你不会删除任何东西,你只是在尽可能多地完成探索之后从当前路径中删除它。我是不是误会你了?
    • 首先,我认为我最初错误地提出了这个问题(抱歉给您带来的不便),更好的方法是:找到一组连接的节点组(而不是路径),其中每个组的大小是
    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多