Pagini recente » Cod sursa (job #864007) | Cod sursa (job #2287110) | Cod sursa (job #721960) | Cod sursa (job #1913781) | Cod sursa (job #2708778)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
// Sortare topologica
queue<int> sorted;
void parcurge(int index, vector<queue<int>> &nodes, vector<int> &parents) {
parents[index]--;
if (!parents[index]) {
sorted.push(index);
parents[index]--;
while (nodes[index].size()) {
parcurge(nodes[index].front(), 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<queue<int>> nodes(n + 1);
vector<int> 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;
}