David Eisenstat 对我的问题的评论建议调整他对类似问题的回答。下面的伪代码就是那个适配,我已经验证过它是有效的,并且不会多次生成任何一个子图。其中它n
指的是要返回的子图的顺序(如果要返回所有子图,可以省略对其的测试),并neighbours(e)
表示与 共享端点的边集e
。首次调用该函数时,subgraphEdges
参数应包含给定的边,其余参数应相应设置。
GenerateConnectedSubgraphs(edgesToConsider,
子图顶点,
子图边,
邻接边缘):
让 edgeCandidates ← edgesToConsider ∩ neighbouringEdges
如果边缘候选者 = ∅
如果 |子图顶点| = n
产量(子图顶点,子图边)
别的
选择一些 e ∈ edgeCandidates
GenerateConnectedSubgraphs(edgesToConsider ∖ {e},
子图顶点,
子图边,
邻接边缘)
GenerateConnectedSubgraphs(edgesToConsider ∖ {e},
subgraphVertices ∪ 端点(e),
subgraphEdges ∪ {e},
neighbouringEdges ∪ neighbours(e))