题解 | 【模板】拓扑排序

【模板】拓扑排序

https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c

import sys
from collections import deque

a = sys.stdin.read().split()
# number of nodes and number of edges
n,m = int(a[0]),int(a[1]) 

edge = []
adj = [[] for _ in range(n+1)]
in_degree = [0]*(n+1)
idx = 2
for _ in range(m):
    u,v = int(a[idx]),int(a[idx+1]) 
    edge.append((u,v))
    # build the adjcent list and record the in_degree
    adj[u].append(v)
    in_degree[v] += 1
    idx += 2
# print(in_degree)

queue = deque()
for v in range(1,n+1):
    if in_degree[v] == 0:
        queue.append(v)

topo_order =[]
while queue:
    u = queue.popleft()
    topo_order.append(u)
    for v in adj[u]:
        in_degree[v] -= 1
        if in_degree[v] == 0:
            queue.append(v)


if len(topo_order) == n:
    print(' '.join(map(str,topo_order)))
else:
    print(-1)









全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 13:15
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务