纯拓扑排序
注意priority_queue的用法
//拓扑排序复习 HDU1285
#include<bits/stdc++.h>
using namespace std;
const int N = 505;
int g[N][N];
int in[N];
int n, m;
void topsort() {
priority_queue<int, vector<int>, greater<int>>Q;
for (int i = 1; i <= n; i++)
if (in[i] == 0)
Q.push(i);
bool flag = false;
while (!Q.empty()) {
int u = Q.top();
Q.pop();
in[u] = -1;
if (!flag) {
printf("%d", u);
flag = true;
}
else
printf(" %d", u);
for (int i = 1; i <= n; i++) {
if (g[u][i]) {
g[u][i] = 0;
in[i]--;
if (in[i] == 0)
Q.push(i);
}
}
}
printf("\n");
}
int main() {
while (scanf("%d%d", &n, &m) != EOF) {
memset(g, 0, sizeof(g));
memset(in, 0, sizeof(in));
int u, v;
while (m--) {
scanf("%d%d", &u, &v);
if (g[u][v])continue;
g[u][v] = 1;
in[v]++;
}
topsort();
}
return 0;
}