Cod sursa(job #930005)

Utilizator alexandru93moraru alexandru sebastian alexandru93 Data 27 martie 2013 13:20:10
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
/*
Sa se citeasca un graf orientat fara bucle si fara arce multiple G=(V,E)


*/

#include<fstream>
#include<vector>
#define maxn 50001
using namespace std;

int N,M;
vector<int> V[maxn];
vector<int> S;
vector<int> Rez;
ifstream f("sortaret.in");
ofstream g("sortaret.out");

void DF( int nod )
{
     S[nod] = 2;
     for (vector<int>::iterator it=V[nod].begin();it!=V[nod].end();it++)
         if ( S[*it] == 1 )
              DF( *it );
     S[nod] = 3;
     Rez.push_back(nod);
}

void sortareTopologica(){
    for(int i=1;i<=N;i++)
        if(!S[i])
        DF(i);
}

void citire(){
    int x,y;
    f>>N>>M;
    S.resize(N+1);
    for(int i=1;i<=M;i++){
        f>>x>>y;
        V[x].push_back(y);
        S[y]=1;
    }
}

void afis(){
    for(int i=0;i<=Rez.size();i++)
        g<<Rez[i]<<' ';
    g<<'\n';
}

int main(){
    citire();
    sortareTopologica();
    afis();
    return 0;
}