迭代深度的深度优先搜索

来源:互联网 发布:启明星辰网络安全设备 编辑:程序博客网 时间:2024/05/22 12:39

代码:

def iddfs(G,s):    yielded=set()    def recurse(G,s,d,S=None):        if s not in yielded:            yield s            yielded.add(s)        if d==0:return        if S is None:S=set()        S.add(s)        for u in G[s]:            if u in S:continue            for v in recurse(G,u,d-1,S):                yield v    n=len(G)    for d in range(n):        if len(yielded)==n:break        for u in recurse(G,s,d):            yield uif __name__=="__main__":    a, b, c, d, e, f, g, h, i= range(9)    N = [        {b, c, d}, # a        {a, d}, # b        {a,d}, # c        {a,b,c}, # d        {g,f}, # e        {e,g}, # f        {e,f}, # g        {i}, # h        {h} #i    ]    G=[{b,c,d,e,f},#a     {c,e},#b     {d},#c     {e},#d     {f},#e     {c,g,h},#f     {f,h},#g     {f,g}#h     ]    p=list(iddfs(G,0))    print(p)    m=list(iddfs(N,0))    print(m)

运行:

[0, 1, 2, 3, 4, 5, 6, 7][0, 1, 2, 3]