Pagini recente » Cod sursa (job #211704) | Cod sursa (job #2668230) | Cod sursa (job #2438572) | Cod sursa (job #1094290) | Cod sursa (job #2708781)
#include <iostream>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
// Sortare topologica
queue<short> sorted;
void parcurge(short index, vector<stack<short>> &nodes, vector<short> &parents) {
parents[index]--;
if (!parents[index]) {
sorted.push(index);
parents[index]--;
while (nodes[index].size()) {
parcurge(nodes[index].top(), nodes, parents);
nodes[index].pop();
}
}
}
int main() {
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
int n, m, x, y;
scanf("%d %d", &n, &m);
vector<stack<short>> nodes(n + 1);
vector<short> parents(n + 1);
while (m--) {
scanf("%d %d", &x, &y);
nodes[x].push(y);
parents[y]++;
}
for (x = 1; x <= n; x++) {
if (!parents[x]) {
parents[x]++;
parcurge(x, nodes, parents);
}
}
for (; sorted.size(); sorted.pop())
cout << sorted.front() << ' ';
return 0;
}