题解 | 【模板】拓扑排序

【模板】拓扑排序

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

import sys
from collections import deque

def topological_sort(n, m ,edges):
    adj = [[] for _ in range(n+1)] # 接邻表
    in_degree = [0]*(n+1) # 入度数组
    for u, v in edges:
        adj[u].append(v)
        in_degree[v] += 1
    
    # 入度为0的队列
    q = deque()
    for i in range(1,n+1):
        if in_degree[i] == 0:
            q.append(i)

    # 拓扑排序数组
    result = []
    while q:
        u = q.popleft()
        result.append(u)
        for v in adj[u]:
            in_degree[v] -=1
            if in_degree[v] == 0:
                q.append(v)
    if len(result) != n:
        return -1
    return result

n, m = map(int, input().split())
edges = [tuple(map(int, input().split())) for _ in range(m)]
result = topological_sort(n, m, edges)

# 输出结果
if result == -1:
    print(-1)
else:
    print(" ".join(map(str, result)))

全部评论

相关推荐

可以不说话:笔试a了3道半,今天说是挂了😭😭
投递汇丰科技等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务