Cod sursa(job #796080)

Utilizator florin.ilieFlorin Ilie florin.ilie Data 10 octombrie 2012 16:38:16
Problema Sortare topologica Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>

using namespace std;

int n,m,a[100][100],u,ul;
int sol[100],c[100],viz[100];
int ok[100];
void citire ()
{
	freopen("sortaret.in","r",stdin);
	int x,y;
	scanf("%d %d",&n,&m);
	for(int i=0;i<m;i++)
	{
		scanf("%d %d",&x,&y);
		a[x][y]=1;
		ok[y]=1;
	}
	for(int i=1;i<=n;i++)
		if(ok[i]==0){
			c[u++]=i;
		}
}
int ver(int x)
{
	for(int i=1;i<=n;i++)
		if(a[i][x]==1)
			return 0;
	return 1;
}
void parc ()
{
	for(int i=0;i<u;i++){
		viz[c[i]]=1;
		sol[ul++]=c[i];
		for (int j=1;j<=n;j++){
			if(a[c[i]][j]==1){
				a[c[i]][j]=0;
				if (ver(j))
					c[u++]=j;
			}
		}
	}
}
void afisare ()
{
	freopen("sortaret.out","w",stdout);
	for(int i=0;i<ul;i++)
		printf("%d ",sol[i]);
	printf("\n");
}
int main ()
{
	citire();
	parc();
	afisare();
	return 0;
}