Pagini recente » Utilizatori inregistrati la Infoarena Monthly 2014 - Runda 7 | Istoria paginii runda/oni_11_12_0/clasament | Istoria paginii runda/concurs_11_12_02_28/clasament | Istoria paginii runda/srymwgerhd/clasament | Cod sursa (job #1651931)
#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,vector<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_back(temp.top());
//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;
vector<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[i]+1<<' ';
//fout<<sortt.top()<<' ';
//sortt.pop();
}
fin.close();
fout.close();
return 0;
}