对有向无环图(DAG) 的所有顶点排成一个线性序列,使得对于图中的每条有向边 (u, v),u 在序列中排在 v 之前。
1vector<int> topoSort(int n, vector<vector<int>>& adj) {
2 vector<int> indegree(n, 0);
3 for (int u = 0; u < n; u++)
4 for (int v : adj[u])
5 indegree[v]++;
6
7 queue<int> q;
8 for (int i = 0; i < n; i++)
9 if (indegree[i] == 0)
10 q.push(i);
11
12 vector<int> result;
13 while (!q.empty()) {
14 int u = q.front(); q.pop();
15 result.push_back(u);
16 for (int v : adj[u])
17 if (--indegree[v] == 0)
18 q.push(v);
19 }
20 return result; // 若 result.size() < n,则有环
21}