Cod sursa(job #699543)

Utilizator darle.gheorgheDarle Gheorghe darle.gheorghe Data 29 februarie 2012 19:59:35
Problema BFS - Parcurgere in latime Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
#define NMax 10000
FILE *fin, *fout;
long n,m,s;
int x,y;
long int a[NMax][NMax];
long int viz[NMax],c[NMax],r[NMax];

int citire()
{
	fscanf(fin,"%d%d%d",&n,&m,&s);
	while(m!=0)
	{
		fscanf(fin,"%d%d",&x, &y);
		if(x!=y)
		{
		a[x][0]++;
		a[x][a[x][0]]=y;
		}
		m--;
	}
}

int parcurg(int x)
{
	long i,j,nr;
	long prim,ultim;
	long drum[NMax];
	viz[x]=-1;
	for(i=1;i<=n;i++)
	{
	nr=0;
	c[0]=x;
	prim=ultim=0;
	while(prim<=ultim && viz[i]==0)
	{
		x = c[prim++];
		for(j=1;j<=a[x][0];j++)
			if(viz[a[x][j]]==0)
			{
				viz[a[x][j]]=x;
				if(viz[i]!=0)
					break;
				else
				c[++ultim]=a[x][j];
			}
	}
	if(i==s)
		r[i]=0;
	else
		if(viz[i]==0)
		r[i]=-1;
	else
		{
			long poz=0;
			drum[0]=i;
			while(viz[drum[poz]]!=-1)
				{
					drum[++poz]=viz[drum[poz-1]];
					nr++;
				}
		r[i]=nr;
		}
	}
}

main()
{
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");

citire();	
parcurg(s);
for(int i=1;i<=n;i++)
	fprintf(fout,"%d ",r[i]);
fclose(fin);
fclose(fout);
}