更好的python中的环查找程序代码

时间:2013-08-27 15:01:12

标签: python graph-theory

我以一种非常愚蠢的方式写了一个环检测程序。任何人都可以帮助改善吗?以下代码是查找所有5个成员的响铃。我需要一个能够找到N元环的通用函数,其中N通常小于10.感谢一百万!

在我的问题中,我有大约2000分。每个点连接到其他几个点,这些连接点存储在neighbor_list中。并且point[i].neighbor_list()返回point [i]的邻居列表。以下代码中的想法是从一点开始,遍历其邻居列表及其邻居的邻居列表,依此类推,找到路由/周期/响铃以返回到原始点。我的代码的核心部分如下,它只找到由5个点组成的环。我需要一个通用代码来查找所有N成员环。如果有任何不清楚的地方请发表评论。

for r0 in range(2000): #ring member 0
    rin.append(r0)
    for r1 in point[r0].neighbor_list():
        rin.append(r1) #ring member 1 
        for r2 in point[r1].neighbor_list():
            if r2 == r0: continue # to avoid the case of a-b-a ...
            else: rin.append(r2)
            for r3 in point[r2].neighbor_list():
                if r3 == r1: continue
                else: rin.append(r3)
                for r4 in point[r3].neighbor_list():
                    if r4 == r2: continue
                    else: rin.append(r4)
                    for r5 in point[r4].neighbor_list():
                        if r5 == r0: 
                            rin.append(r5)
                            rings.append(list(rin)) # find a ring, save it
                            rin.pop()
                        else: continue  
                    rin.pop()
                rin.pop()
            rin.pop()
        rin.pop()
    rin.pop()

1 个答案:

答案 0 :(得分:0)

您正试图在无向图中找到大小为N的周期。

您可以找到所有周期,然后选择尺寸合适的周期。看到这个答案。 Finding all cycles in undirected graphs