Cod sursa(job #2343437)

Utilizator ewaldBerla Ewald ewald Data 13 februarie 2019 23:18:50
Problema Sortare topologica Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;

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

struct edges{
    int length = 0;
    int neighbours[17] = { 0 };
    bool visited = false;

    int push_neighbour( int x ){
        neighbours[ ++length ] =  x;
    }
};

void read_edges (edges e[], unsigned int &n, unsigned int &m){
    f>>n>>m;
    int a,b;
    for(int i=1;i<=m;i++){
        f>>a>>b;
        e[a].push_neighbour(b);
    }
}

void recursion (edges e[],int elems[], int poz, unsigned int n, unsigned int&k){
   if(poz == n+1)
    return;
   e[poz].visited = true;
   for(int i = 1; i<=e[poz].length; i++)
       if( e[poz].neighbours[i]!=0 && !e[e[poz].neighbours[i]].visited)
           recursion(e,elems,e[poz].neighbours[i],n,k);
    elems[++k] = poz;

}

void solve(edges e[],int elems[], unsigned int n, unsigned int &k){
    for(int i=1; i<=n; i++)
        if(e[i].visited == false){
            recursion(e,elems,i,n,k);
        }
}

void print(int elems[], unsigned int k){
    while( k ){
        g<<elems[k]<<" ";
        k--;
    }

}

int main()
{
    int elems[40100];
    edges e[25010];
    unsigned int  n,m,k;
    read_edges(e,n,m);
    solve(e,elems,n,k);
    print(elems,k);
    return 0;
}