Cod sursa(job #582140)

Utilizator mihaidutescuDutescu Mihai mihaidutescu Data 14 aprilie 2011 22:28:40
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <stdio.h>
int n,m,vizitat[50001];
struct rez
{
	int nod;
	rez *adr_urm;
};

rez *primul_nod[50001],*primul_nodsol;

void adaugasol(int n)
{
	rez *tmp=new rez;
	tmp->adr_urm=NULL;
	tmp->nod=n;
	if(!primul_nodsol)
		primul_nodsol=tmp;
	else
	{
		tmp->adr_urm=primul_nodsol;
		primul_nodsol=tmp;
	}
}

void adauga(int i,int n)
{
	rez *tmp=new rez;
	tmp->adr_urm=NULL;
	tmp->nod=n;
	if(!primul_nod[i])
		primul_nod[i]=tmp;
	else
	{
		tmp->adr_urm=primul_nod[i];
		primul_nod[i]=tmp;
	}
}

void afiseaza()
{
	FILE *g=fopen("sortaret.out","w");
	rez *tmp=primul_nodsol;
	while(tmp)
	{
		fprintf(g,"%d ",tmp->nod);
		tmp=tmp->adr_urm;
	}
}

void sort(int poz)
{
	vizitat[poz]=1;
	rez *curs=primul_nod[poz];
	while(curs)
	{
		if(!vizitat[curs->nod])
			sort(curs->nod);
		curs=curs->adr_urm;
	}
	adaugasol(poz);
}

int main()
{
	FILE *f=fopen("sortaret.in","r");
	fscanf(f,"%d %d\n",&n,&m);
	int x,y;
	for(int i=1;i<=n;i++)
	{
		fscanf(f,"%d %d\n",&x,&y);
		adauga(x,y);
	}
	for(int i=1;i<=n;i++)
		if(!vizitat[i])
			sort(i);
	afiseaza();
	return 0;
}