n, m=map(int, input().split()) #顶点数,边数
from collections import deque
#邻接表+入度表+队列
graph=[[] for _ in range(n+1)]
indegree=[0]*(n+1)
for i in range(m):
s,e=map(int, input().split())
graph[s].append(e)
indegree[e]+=1
q=deque()
for i in range(1,n+1):
if indegree[i]==0:#添加入度为0的结点到队列中
q.append(i)
res=[]
while q:
s= q.popleft()
res.append(s)
for e in graph[s]:
indegree[e]-=1
if indegree[e]==0:
q.append(e)
if len(res)!=n:
print(-1)
else:
print(' '.join(map(str,res)))
分配 n+1个,这样访问下标的时候可以从 1 开始

京公网安备 11010502036488号