【算法导论】python实现DFS

G = {'U':['V', 'X'],
     'V':['Y'],
     'X':['V'],
     'Y':['X'],
     'W':['Y', 'Z'],
     'Z':['Z']
     }

def DFS(G):
    for u in G.keys():
        G[u].append('white')
    global time
    time = 0
    for u in G:
        if 'white' in G[u]:
            DFS_VISIT(G, u)
    return G
def DFS_VISIT(G, u):
    global time
    global ud, uf
    time = time + 1
    ud = time
    G[u].append(ud)
    for i in range (len(G[u]) - 2, 0, -1):
        if 'white' in G[u]:
            G[u][i] = 'gray'
        else:
            continue
    for v in G[u]:
        if v != 'gray' and type(v) != int:
            if 'white' in G[v]:
                G[u].append(v)
                DFS_VISIT(G, v)
        else:
            continue
    time = time + 1

    uf = time
    G[u].append(uf)
    for i in range (len(G[u]) - 4, 0, -1):
        if 'gray' in G[u]:
            G[u][i] = 'black'
print(DFS(G))

这个代码做的不是很完美,有一个bug 就是需要每个顶点都需要有边,之后我会改进

{'U': ['V', 'X', 'black', 1, 'V', 8], 'V': ['Y', 'black', 2, 'Y', 7], 'X': ['V', 'gray', 4, 5], 'Y': ['X', 'black', 3, 'X', 6], 'W': ['Y', 'Z', 'black', 9, 'Z', 12], 'Z': ['Z', 'gray', 10, 11]}

这是输出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值