Cod sursa(job #2341516)

Utilizator ewaldBerla Ewald ewald Data 11 februarie 2019 21:33:39
Problema Sortare topologica Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;

#define Nmax 50100

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

struct stack{
  long length;
  long elems[Nmax];

  void push( long x ){
    elems [++length] = x;
  }

  long pull(){
       length--;
       return elems [length+1];
   }

};

struct edges{
    long a;
    long b;
    bool visited = 0;
};

void read_data( edges e[], long &length, long &vertices ){
    f>>vertices>>length;
    for(int i=1; i<=length; i++)
        f>>e[i].a>>e[i].b;
}

void recursion( bool visited[],edges e[], long length ,int x,stack &s){
    visited[x] = true;
    for(int i=1; i<=length; i++){
         if(x == e[i].a && !visited[e[i].b])
    recursion(visited,e,length,e[i].b,s);
    }
    s.push(x);
}

void solve(bool visited[], edges e[], long length, long vertices, stack &s){
    int i;
    for(i=1; i<=vertices; i++)
            if(!visited[i]){
                recursion(visited,e,length,i,s);
            }
}

void print_data(stack s){
    while(s.length>=1){
        g<<s.pull()<<" ";
    }
}

int main()
{
    edges e[Nmax];
    long length,vertices;
    bool visited[Nmax] = {0};
    stack s;

    read_data(e,length,vertices);
    solve(visited,e,length,vertices,s);
    print_data(s);
}