Bailian4084 拓扑排序
问题简述:(略)
问题分析:拓扑排序的模板题,但是这个题需要按一定顺序输出结果。
程序说明:用数组din[]存储各个结点的入度。由于需要按指定顺序输出结果,需要用优先队列给结点排队。
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian4084 拓扑排序 */
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
vector<int> e[N + 1];
int n, m, din[N + 1], ans[N], cnt;
int toposort()
{
priority_queue<int, vector<int>, greater<int>> q;
for(int i = 1; i <= n; i++)
if(din[i] == 0) q.push(i);
cnt = 0;
while(!q.empty()) {
int u = q.top();
q.pop();
ans[cnt++] = u;
for(int i = 0; i < (int) e[u].size(); i++) {
int v = e[u][i];
if(--din[v] == 0) q.push(v);
}
}
return cnt;
}
int main()
{
while(~scanf("%d%d", &n, &m)) {
for(int i = 1; i <= n; i++) e[i].clear();
memset(din, 0, sizeof(din));
for(int i = 1; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
e[u].push_back(v);
din[v]++;
}
if(toposort() == n)
for(int i = 0; i < n; i++) printf("v%d ", ans[i]);
printf("\n");
}
return 0;
}