⚠️ 同一个函数,有环的图上会骗你
七个构建任务编号 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))))
全部评论