拓扑排序练习题:任务安排顺序(Kahn)
Submit solution
Points:
100
Time limit:
1.0s
Memory limit:
4M
Author:
Problem type
Allowed languages
C, C++
🧠 拓扑排序练习题:任务安排顺序(Kahn)
📖 题目描述
某公司有 \(n\) 个任务要完成,编号为 \(0\) 到 \(n - 1\)。由于任务之间存在依赖关系,必须先完成某些任务后,才能开始另一些任务。
现在给出 \(m\) 条任务依赖关系,每条依赖关系为一对整数 \([a, b]\),表示:任务 \(b\) 依赖于任务 \(a\),即 必须先完成任务 \(a\),才能进行任务 \(b\)。
请你输出一种可行的任务执行顺序,使得所有依赖关系都被满足。如果存在多个合法的顺序,输出任意一种即可。如果无法完成所有任务(即依赖关系中存在环),输出 IMPOSSIBLE。
🧾 输入格式
- 第一行:两个整数 \(n\) 和 \(m\)(\(1 \le n \le 10^4\), \(0 \le m \le 2 * 10^4\))
- 接下来的 \(m\) 行:每行两个整数 \(a\) 和 \(b\),表示任务 \(a\) 依赖于任务 \(b\)
📤 输出格式
- 如果存在合法的任务执行顺序,输出一行包含 \(n\) 个整数,表示任务的执行顺序(用空格分隔);
- 如果不存在合法顺序(存在环),输出:IMPOSSIBLE
💡 示例 1
输入:
4 4
1 0
2 0
3 1
3 2
输出:
0 1 2 3
解释:任务 1 和 2 必须在任务 0 完成后执行,任务 3 必须等 1 和 2 都完成后执行。合法顺序有多种,比如:\(0 2 1 3\) 也是合法的。
💡 示例 2
输入:
3 3
0 1
1 2
2 0
输出:
IMPOSSIBLE
解释:任务之间形成了一个环,无法安排顺序。
✅ 说明
该问题的本质是对一个有向图进行 拓扑排序:
- 如果图是一个 DAG(有向无环图),则存在拓扑序;
- 如果图中存在环,则无法完成所有任务。
🧠 提示
- 建议使用 Kahn 算法(入度法);
- 本题与 LeetCode 经典题目 Course Schedule II 类似;
- 输出任意一个符合条件的拓扑序即可,无需唯一。
Comments