拓扑排序(Topo sort)
对DAG(有向无环图)拓扑排序,非DAG不存在拓扑排序的说法。
方法也很简单,记录每个顶点的入度,将入度为0的点用队列维护,依次遍历即可。
模板代码:
const int N = 107;
int n;
vector<int> g[N];
int deg[N];
int ans[N], cnt;
queue<int> q;
void toposort() {
cnt = 0;
for (int i = 1;i <= n;i++) deg[i] = 0;
for (int i = 1;i <= n;i++) for (auto v : g[i]) deg[v]++;
for (int i = 1;i <= n;i++) if (!deg[i]) q.push(i);
while (!q.empty()) {
int u = q.front();
q.pop();
ans[++cnt] = u;
for (auto v : g[u]) {
deg[v]−−;
if (!deg[v]) q.push(v);
}
}