Cod sursa(job #2769368)

Utilizator MindralexMindrila Alex Mindralex Data 14 august 2021 23:19:59
Problema Sortare topologica Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int maxVal = 50001;

struct nod
{
    int info;
    nod * next;
}* v[maxVal];

void adaugare (int x, int y)
{
    nod * t = new nod;
    t -> info = y;
    t -> next = v[x];
    v[x] = t;
}

void dfs (int x, int stiva[], int &h, int vizitat[])
{
    vizitat[x] = 1;
    nod * t =  v[x];
    while (t)
    {
        int nod_curent = t -> info;
        if (vizitat[nod_curent] == 0)
            dfs (nod_curent, stiva, h, vizitat);
        t = t -> next;
    }
    stiva[++h] = x;
}

int main ()
{
    int n, m, grad_intern[maxVal] = {0};
    fin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int x, y;
        fin >> x >> y;
        grad_intern[y]++;
        adaugare (x, y);
    }

    int stiva[maxVal], h = 0, vizitat[maxVal]={0};
    for (int i = 1; i <= n; i++)
    {
        if (grad_intern[i] == 0 && vizitat[i] == 0)
        {
            dfs(i, stiva, h, vizitat);
        }
    }
    while (h)
    {
        fout << stiva[h] << ' ';
        h--;
    }
    return 0;
}