Cod sursa(job #930917)

Utilizator xbogdanBogdan Boamfa xbogdan Data 27 martie 2013 21:26:36
Problema Sortare topologica Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include "iostream"
#include "fstream"
#include "cstdlib"
#include "stack"
using namespace std;
ifstream in("sortaret.in");
ofstream out("sortaret.out");
stack<int> S;
void dfs(int sursa,int **a,int n,int *&viz) 
{
	viz[sursa] = 1;
	for(int i = 1; i < n+1; i++)
	{
		if(!viz[i] && a[sursa][i])
			dfs(i,a,n,viz);
	}
	S.push(sursa);
}
void sortT(int **a,int n)
{
	int *viz = (int*)calloc(n+1,sizeof(int));
	for(int i = 1; i < n+1; i++)
	{
		if(!viz[i])
			dfs(i,a,n,viz);
	}
}
void read(int **&a,int &n)
{
	int nr;
	in >> n >> nr;
	// Alocare matrice
	a = (int**)calloc(n+1,sizeof(int*));
	for (int i = 0; i < n+1; ++i)
		a[i] = (int*)calloc(n+1,sizeof(int));
	for (int i = 0; i < n+1; ++i)
		for (int j = 0; j < n+1; ++j)
			a[i][j] = 0;
	// Citire graf
	for (int i = 0; i < nr; ++i)
	{
		int x,y;
		in >> x >> y;
		a[x][y] = 1;
	}
}
void print(int **a,int n)
{
	for (int i = 1; i < n+1; ++i) {
		for (int j = 1; j < n+1; ++j)
			cout<<a[i][j]<<" ";
		cout<<"\n";
	}
}
int main(int argc, char const *argv[])
{
	int **a;
	int n;
	read(a,n);
	print(a,n);
	sortT(a,n);
	cout<<"\n";
	while(!S.empty())
	{
		out<<S.top()<<" ";
		S.pop();
	}
	return 0;
}