Cod sursa(job #897153)

Utilizator harababurelPuscas Sergiu harababurel Data 27 februarie 2013 19:08:55
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define nmax 50005
using namespace std;

int n, m;
bool vizitat[nmax];
vector <int> vecin[nmax];
vector <int> sol;

void dfs(int curent) {
	vizitat[curent] = true;
	
	for(int i=0; i<vecin[curent].size(); i++)
		if(!vizitat[vecin[curent][i]]) dfs(vecin[curent][i]);
		
	sol.push_back(curent);	
	//pot baga elementul curent in solutie doar dupa ce am rezolvat toate elementele ce trebuiesc facute inaintea lui
}
		
int main() {
	ifstream f("sortaret.in");
	ofstream g("sortaret.out");
	
	int i, j, a, b;
	
	f>>n>>m;
	for(i=1; i<=m; i++) {
		f>>a>>b;
		vecin[a].push_back(b);
	}
	
	memset(vizitat, 0, nmax*sizeof(bool));
	
	for(i=1; i<=n; i++)
		if(!vizitat[i]) dfs(i);
		
	for(i=sol.size()-1; i>=0; i--) g<<sol[i]<<" "; g<<"\n";
	
	return 0;
}