Cod sursa(job #952383)

Utilizator bogdan93Grigorescu Bogdan bogdan93 Data 23 mai 2013 11:15:30
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
#include <string>
#include <utility>
#include <bitset>

using namespace std;

class sortareT{

    private:
        vector<int> graf[50001], asdsa;
        bitset<50001> vizitat;
        int nrNoduri, nrMuchii, cntr;
        fstream in, out;
        struct bla{

            int in, out;
        }timp[50001];

        void dfs(int);

    public:

        void read();
        void start();
        void print();

    public:
        sortareT(string, string);
        ~sortareT();



};



int main()
{
    cout << "Hello world!" << endl;

    sortareT *test = new sortareT ("sortaret.in", "sortaret.out");

    test->read();


    test->start();

    test->print();


    return 0;
}

void sortareT::dfs(int x){

    vizitat[x] = 1;
    for (int i = 0; i < graf[x].size(); i++){

        int y = graf[x][i];
        if (!vizitat[y]){
            dfs(y);
        }
    }
    asdsa.push_back(x);


}

void sortareT::read(){

    in >> nrNoduri >> nrMuchii;
    int aux1, aux2;

    for (int i = 1; i <= nrMuchii; i++){

        in >> aux1 >> aux2;
        graf[aux1].push_back(aux2);
    }

}
void sortareT::start(){

    vizitat.reset();
    timp[1].in = ++cntr;
    for (int i = 1; i <= nrNoduri; i++){

        if (!vizitat[i]){

            dfs(i);
        }
    }
}

void sortareT::print(){

    for (vector<int>::iterator it = asdsa.end() - 1; it >= asdsa.begin(); it--){

        out << *it << " ";
    }
    out << endl;

}

sortareT::sortareT(string fin, string fout):
cntr(0){

    in.open(fin.c_str(), ios::in);
    out.open(fout.c_str(), ios::out);

}
sortareT::~sortareT(){

    in.close();
    out.close();

}