Pagini recente » Cod sursa (job #1160619) | Cod sursa (job #1362492) | Cod sursa (job #1854342) | Cod sursa (job #2137092) | Cod sursa (job #769063)
Cod sursa(job #769063)
/*
Sortarea topologica.
*/
#include <iostream>
#include <vector>
#include <stack>
#include <stdio.h>
#include <stdbool.h>
#define MAXN 100050
#define ALB 0
#define NEGRU 1
using namespace std;
int nr_noduri, nr_muchii, nr_comp_conexe;
bool vizitat[MAXN];
vector<int> noduri[MAXN];
stack<int> stiva;
void dfs (int u) {
vizitat[u] = NEGRU;
int i;
for (i = 0; i < noduri[u].size(); i++) {
if (vizitat[noduri[u][i]] == ALB)
dfs(noduri[u][i]);
}
stiva.push(u);
}
void sortare_topologica () {
int i;
for (i = 1; i <= nr_noduri; i++)
vizitat[i] = ALB;
stiva.push(nr_noduri);
for (i = 1; i <= nr_noduri; i++)
if (vizitat[i] == ALB)
dfs(i);
}
int main () {
freopen("sortaret.in", "r", stdin);
freopen("sortaret.out", "w", stdout);
int i, x, y;
scanf("%d %d", &nr_noduri, &nr_muchii);
for (i = 1; i <= nr_muchii; i++) {
scanf("%d %d", &x, &y);
noduri[x].push_back(y);
}
sortare_topologica();
while (!stiva.empty()) {
printf("%d ", stiva.top());
stiva.pop();
}
printf("\n");
return 0;
}