我试图找到一种快速算法来获得所有连接的子图,形成一个子图长度受限的无向图。简单的方法,例如每个顶点的 BFS 或 DFS 会生成大量相等的子图,因此在每次算法迭代中,我们都必须修剪子图集。我在俄罗斯数学论坛上发现了一个算法:
Procedure F(X,Y)
//X set of included vertices
//Y set of forbidden vertices to construct new subgraph
1.if |X|=k, then return;
2.construct a set T[X] of vertices that adjacent to vertices from X (If X is a empty set, than T[X]=V), but not belong to the sets X,Y;
3.Y1=Y;
4.Foreach v from T[X] do:
__4.1.X1=X+v;
__4.2.show subgraph X1;
__4.3.F(X1,Y1);
__4.4.Y1=Y1+v;
Initial call F(X,Y):
X, Y = empty set;
F(X,Y);
该算法的主要思想是使用“禁止集”,因此不需要剪枝,该算法的作者说它比基于剪枝等于子图的解决方案快 300 倍。但是我还没有找到任何证据证明这个算法是正确的。
更新:在这里找到了更有效的解决方案