⚠️ 拓扑排序一共做了多少次减法

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

七个构建任务编号 0~6(a, b) 表示 a 做完才能做 b:数一数 kahn 里"入度减 1"这个动作在两张图上各做了多少次——左边是那张 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 kahn_cost(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
    ready = sorted(u for u in range(N) if d[u] == 0)
    steps = 0
    while ready:
        u = ready.pop(0)
        for v in g[u]:
            d[v] -= 1
            steps += 1
            if d[v] == 0:
                ready.append(v)
        ready.sort()
    return steps

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

                        
👩‍🏫
AI
💬 题目评论

全部评论