Cod sursa(job #614211)

Utilizator lichMarin Cristian lich Data 5 octombrie 2011 20:49:46
Problema Sortare topologica Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int N,precedenti[50],adiac[50][50],vizitat[50];

void citeste_fisier();
void parcurgere();
bool verif_term();

int main()
{
	citeste_fisier();
	parcurgere();
	return 0;
}


void parcurgere()
{
	FILE *g = fopen("sortaret.out","w");

	int i,j,k;
	while ( verif_term() == false )
	{
		for(i=0;i<N;i++)
		{
			if ( precedenti[i] == 0 && vizitat[i] == 0 )
			{
				vizitat[i] = 1;
				fprintf(g,"%d ",i+1);
				for(j=0;j<N;j++)
					if ( adiac[i][j] == 1 )
						precedenti[j]--;
			}
		}
	}

	fclose(g);
}

bool verif_term()
{
	for(int i=0;i<N;i++)
		if ( vizitat[i] == 0 )
			return false;
	return true;
}

void citeste_fisier()
{
	FILE *f = fopen("sortaret.in","r");
	if ( f == 0 )
		return;
	int M,a,b;
	fscanf(f,"%d %d",&N,&M);
	for(int i=0;i<M;i++)
	{
		fscanf(f,"%d %d",&a,&b);
		precedenti[b]++;
		adiac[a][b] = 1;
	}

	fclose(f);
}