Cod sursa(job #1651932)

Utilizator azbe11Anonim azbe11 Data 14 martie 2016 11:23:36
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
using namespace std;

void dfs(const vector<vector<int> > &graph,const int &v,const int &c,vector<bool> &visited,stack<int> &sortt)
{
    int element,i;
    bool found;
    stack<int> temp;
    temp.push(c);
    visited[c]=true;
    while(!temp.empty())
    {
        element=temp.top();
        found=false;
        for(i=0;i<graph[element].size() && !found;i++)
        {
            if(!visited[graph[element][i]]) found=true;
        }
        if(found)
        {
            i--;
            temp.push(graph[element][i]);
            visited[graph[element][i]]=true;
        }
        else
        {
            sortt.push(temp.top());
            temp.pop();
        }
    }
}

int main()
{
    ifstream fin("sortaret.in");
    ofstream fout("sortaret.out");
    vector<vector<signed int> > graph;
    vector<bool> visited;
    stack<int> sortt;
    int v,e,i,aux1,aux2;
    fin>>v>>e;
    graph.resize(v);
    visited.resize(v,false);
    for(i=0;i<e;i++)
    {
        fin>>aux1>>aux2;
        aux1--;
        aux2--;
        graph[aux1].push_back(aux2);
    }
    for(i=0;i<v;i++)
    {
        if(!visited[i]) dfs(graph,v,i,visited,sortt);
    }
    for(i=sortt.size()-1;i>=0;i--)
    {
        fout<<sortt.top()+1<<' ';
        sortt.pop();
    }
    fin.close();
    fout.close();
    return 0;
}