Cod sursa(job #1456644)

Utilizator petru.cehanCehan Petru petru.cehan Data 1 iulie 2015 14:47:01
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin ("sortaret.in") ;
ofstream fout ("sortaret.out") ;

#define NMAX 50001

struct nod
   {
        int info;
        nod * next;
   } ;

nod * L[NMAX] ; //Listele de vecini pentru fiecare nod
nod * adresa ; // lista simplu inlantuita
int viz [NMAX];
int N, M;

void Add ( int , int ) ;
void Read()
{
     fin >> N >> M ;
     int X, Y;
     for ( ; M >= 1; M-- )
     {
         fin >> X >> Y ;
         Add (X,Y);
     }
}

void Add( int i, int j)
{
     nod * p = new nod;
     p->info = j;
     p->next = L[i];
     L[i] = p;
}

void DF ( int ) ;
void S_Topologica()
{
     int i;
     for ( i = 1; i <= N; ++i )
         if ( viz [i] == 0 )
            DF( i );
}

void Push ( int ) ;
void DF( int nd )
{
     viz [nd] = 1 ;
     for ( nod * p = L[nd]; p ; p = p->next )
         if ( viz [p->info] == 0 )
              DF( p->info );
     Push ( nd );
}

void Push( int nd )
{
     nod * p = new nod;
     p->info = nd ;
     p->next = adresa;
     adresa = p;
}

void Write()
{
     for ( nod * p = adresa; p; p = p->next )
            fout << p->info << " " ;

}

int main()
{
    Read();
    S_Topologica();
    Write();

    return 0;
}