⚠️ 同一个函数,有环的图上会骗你

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

七个构建任务编号 0~6(a, b) 表示 a 做完才能做 b:把分层函数在两张图上各跑一次:左边是那张 DAG,右边是加了 5 → 3 的那张。

DEP = [(0, 1), (0, 2), (1, 3), (2, 3), (3, 4), (4, 5), (4, 6)]
G = [(0, 1), (0, 2), (1, 3), (2, 3), (3, 4), (4, 5), (5, 3), (4, 6)]
N = 7

def layers(edges):
    g = {u: [] for u in range(N)}
    d = {u: 0 for u in range(N)}
    for a, b in edges:
        g[a].append(b)
        d[b] += 1
    cur = sorted(u for u in range(N) if d[u] == 0)
    out = []
    while cur:
        out.append(cur)
        nxt = []
        for u in cur:
            for v in g[u]:
                d[v] -= 1
                if d[v] == 0:
                    nxt.append(v)
        cur = sorted(nxt)
    return out

print(str(len(layers(DEP))) + "/" + str(len(layers(G))))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论