Pagini recente » Cod sursa (job #2464444) | Cod sursa (job #1851103) | Cod sursa (job #2418590) | Cod sursa (job #1318609) | Cod sursa (job #2263592)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
int verticesNumber, edgeNumber;
vector<int> *adj, v;
bool *visited;
void sortareTipologica(int s);
void addEdge(int v, int w);
int main(){
ifstream read("sortaret.in");
ofstream write("sortaret.out");
read>>verticesNumber>>edgeNumber;
adj = new vector<int>[verticesNumber];
visited = new bool[verticesNumber];
for(int i=0; i<verticesNumber; i++)
visited[i] = false;
for(int i=0; i<edgeNumber; i++){
int x, y;
read>>x>>y;
x--;
y--;
addEdge(x, y);
}
for(int i=0; i<verticesNumber; i++){
sort(adj[i].begin(), adj[i].end());
}
sortareTipologica(0);
for(int i=0; i<verticesNumber; i++)
if(!visited[i])
sortareTipologica(i);
for(int i=verticesNumber-1; i>= 0; i--)
write<<v[i]<<" " ;
return 0;
}
void sortareTipologica(int s){
visited[s] = true;
vector<int>::iterator it = adj[s].begin();
for(; it!=adj[s].end(); ++it){
if(!visited[*it]){
sortareTipologica(*it);
}
}
v.push_back(s+1);
}
void addEdge(int v, int w){
adj[v].push_back(w);
}