Cod sursa(job #2677601)

Utilizator sstanciu10Stanciu Sergiu Nicolas sstanciu10 Data 26 noiembrie 2020 21:05:38
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#define alb 0
#define gri 1
#define negru 2
#define NMAX 50005
using namespace std;
typedef struct nod
{
    int info;
    nod *next;
}*PNOD,NOD;
PNOD L[NMAX]; ///vectorul de vecini pt fiecare nod
PNOD adresa; ///lista simplu inlantuita
int color[NMAX];
int N, M;
void ADD(int, int);
void citire();
void afisare();
void Push(int);
void Sortare_T();
void DF(int);
int main()
{
    citire();
    Sortare_T();
    afisare();
    return 0;
}
void ADD(int i, int j)
{
    PNOD p=new NOD;
    p->info=j;
    p->next=L[i];
    L[i]=p;
}
void citire()
{
    cin>>N>>M;
    while(M)
    {
        int x, y;
        cin>>x>>y;
        ADD(x,y);
        --M;
    }
}
void afisare()
{
    for(PNOD p=adresa; p; p=p->next)
        cout<<p->info;
}
void Push(int nod)
{
    PNOD p = new NOD;
    p->info=nod;
    p->next=adresa;
    adresa=p;
}
void DF(int nod)
{
    color[nod]=gri;
    for(PNOD p=L[nod]; p ; p=p->next)
        if(color[p->info]==alb)
            DF(p->info);
    color[nod]=negru;
    Push(nod);
}
void Sortare_T()
{
    int i;
    for(i=1; i<=N; ++i)
        if(color[i]==alb)
        DF(i);
}