Cod sursa(job #2666314)

Utilizator DenisaCantuCantu Denisa DenisaCantu Data 1 noiembrie 2020 14:59:11
Problema Sortare topologica Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("sortaret.in");
ofstream g("sortaret.out");

int viz[100001], i, ultim, N, M, x, y, S[100001], copil, j;
vector <int> muchii[100001];

void DFS( int nod )
{

    viz[nod] = 1;


    for ( j = 0; j < muchii[nod].size() ; j++)  //parcurg copiii nodului incepand cu ultimul si il pun imediat in lista finala sortata
        {
            copil = muchii[nod][j];
            if(viz[copil] == 0)
               {

                   DFS(copil);  //dupa care plec imediat spre copiii acestuia si fac la fel si pentru ei
               }

        }
    S[++ultim] = nod;

}

void citire()
{
    f >> N >> M;
    for ( i = 1; i <= M; i++ )
        {
            f >> x >> y;           //citesc nodurile x, y si pun in muchii[x] nodurile catre care se duc arce din x
            muchii[x].push_back(y);
        }
}

int main()
{
    citire();

    for ( i = 1; i <= N; i++)
        if ( viz[i] == 0 )
            { //S[++ultim] = i;
            DFS(i); }  //pun in lista nodul din care am plecat

    for ( i = ultim; i >= 1; i-- )
        g << S[i] << " "; //afisez lista finala sortata

    return 0;
}