Cod sursa(job #144669)

Utilizator cos_minBondane Cosmin cos_min Data 27 februarie 2008 20:49:37
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "sortaret.in"
#define out "sortaret.out"
#define dim 50001

int N, M;
char Sel[dim];

typedef struct NOD {
       int vf;
       NOD* next;
} *PNOD;

PNOD graph[dim], Stiva;

void Add(int,int);
void Push(int);
void DF(int);

int main()
{
    int X, Y;
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    memset(Sel,'0',sizeof(Sel));
    
    scanf("%d%d", &N, &M);
    for ( int i = 1; i <= M; i++ )
        scanf("%d%d", &X, &Y), Add(X,Y), Add(Y,X); 
    
    for ( int i = 1; i <= N; i++ )
        if ( Sel[i] != '1' ) DF(i);
    
    for ( PNOD q = Stiva; q; q=q->next )
        printf("%d ", q->vf);
}

void DF(int nod)
{
     Sel[nod] = '1';
     
     for ( PNOD q = graph[nod]; q; q=q->next )
         if ( Sel[q->vf] != '1' ) DF(q->vf);
     
     Push(nod);
}

void Add(int X, int Y)
{
     NOD* p = new NOD;
     p->vf = Y;
     p->next = graph[X]; 
     graph[X] = p;
}

void Push(int K)
{
     if ( !Stiva )
     {
          Stiva = new NOD;
          Stiva->vf = K;
          Stiva->next = 0;
     }
     else
     {
          NOD* p = new NOD;
          p->vf = K;
          p->next = Stiva;
          Stiva = p;
     }
}