Pagini recente » Cod sursa (job #1078064) | Cod sursa (job #2971884) | Cod sursa (job #1467322) | Cod sursa (job #1933645) | Cod sursa (job #769058)
Cod sursa(job #769058)
/*
Sortarea topologica.
*/
#include <iostream>
#include <vector>
#include <stack>
#include <stdio.h>
#define MAXN 100050
#define ALB 0
#define GRI 1
#define NEGRU 2
using namespace std;
int nr_noduri, nr_muchii, nr_comp_conexe;
int vizitat[MAXN];
vector<int> noduri[MAXN];
stack<int> stiva;
void dfs (int u) {
vizitat[u] = 1;
int i;
for (i = 0; i < noduri[u].size(); i++) {
if (!vizitat[noduri[u][i]])
dfs(noduri[u][i]);
}
stiva.push(u);
}
void sortare_topologica () {
int i;
for (i = 1; i <= nr_noduri; i++)
vizitat[i] = 0;
stiva.push(nr_noduri);
for (i = 1; i <= nr_noduri; i++)
if (!vizitat[i])
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;
}