2902: 课程安排(拓扑序)

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:32 解决:28

题目描述

某大学开设了n门课程(编号为0到n-1),学生需要按照先修关系修读这些课程。
例如,若课程u是课程v的先修课,则必须先修完u才能修v。给定所有课程的先修关系,请判断是否存在一种合理的选课顺序(即拓扑序);
若存在,输出任意一个合法的顺序;若不存在(存在循环依赖,如A→B→C→A),则输出-1。

输入

  • 第一行输入两个整数 n 和 m(1 ≤ n ≤ 1000,0 ≤ m ≤ 10000),分别表示课程总数和先修关系的数量。
  • 接下来 m 行,每行输入两个整数 u 和 v(0 ≤ u, v < n),表示课程 u 是课程 v 的直接先修课(即有一条有向边 u → v)。

输出

  • 如果存在合法选课顺序,输出一行,包含 n 个整数,表示任意一个拓扑序(整数间用空格分隔)。
  • 如果不存在合法顺序(图中存在环),输出一行 -1"。

样例输入 复制

4 3
0 1
0 2
1 3

样例输出 复制

0 1 2 3

来源/分类