Cod sursa(job #1347328)

Utilizator stefantrettTrett Stefan stefantrett Data 18 februarie 2015 21:48:49
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <vector>
#include <stack>
#include <stdio.h>

#define Nmax 50005

using namespace std;

vector<int> G[Nmax];
stack<int> S;

int n, m;
int viz[Nmax];

void citire()
{
    int x, y;
    scanf("%d %d\n", &n, &m);
    for(int i=1;i<=m;++i)
    {
        scanf("%d %d\n", &x, &y);
        G[x].push_back(y);
    }
}

void parcurgere(int vf)
{
    viz[vf] = 1;

    for(vector<int>::iterator it = G[vf].begin(); it != G[vf].end(); ++it)
    {
        if(!viz[*it])
            parcurgere(*it);
    }

    S.push(vf);
}

void afisare()
{
    while(!S.empty())
    {
        printf("%d ", S.top());
        S.pop();
    }
}

int main()
{
    freopen("sortaret.in", "r", stdin);
    freopen("sortaret.out", "w", stdout);

    citire();
    for(int i = 1;i<=n;++i)
        if(!viz[i])
            parcurgere(i);
    afisare();
    return 0;
}