Cod sursa(job #1305305)

Utilizator witselWitsel Andrei witsel Data 29 decembrie 2014 18:17:25
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 1000
ifstream in("sortare.in");
ofstream out("sortare.out");
int n,m,x,y,ver[NMAX];
typedef struct lista
{
    int vf;
    lista *next;
}*PNOD;


PNOD adresa,L[NMAX];
void citire();
void add(int i,int j);
void sortare();
void DF(int nod);
void PUSH(int nod);
void afisare();
int main()
{
    citire();
    sortare();
    afisare();
}
void citire()
{
    in>>n>>m;
    for(;m>0;m--)
    {
        in>>x>>y;
        add(x,y);
    }
}

void add(int i,int j)
{
    PNOD p=new lista;
    p->vf=j;
    p->next=L[i];
    L[i]=p;
}

void sortare()
{
    for(int i=1;i<=n;i++)
        if(ver[i]==0)
            DF(i);
}
void DF(int nod)
{
    ver[nod]=1;
    for(lista* p=L[nod];p;p=p->next)
        if(ver[p->vf]==0)
            DF(p->vf);
    ver[nod]=1;
    PUSH(nod);
}

void PUSH(int no)
{
    PNOD p=new lista;
    p->vf=no;
    p->next=adresa;
    adresa=p;
}
void afisare()
{
    for(PNOD p=adresa;p;p=p->next)
        out<<p->vf<<" ";
}