Cod sursa(job #699776)

Utilizator darle.gheorgheDarle Gheorghe darle.gheorghe Data 29 februarie 2012 21:18:02
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 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];

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;
	long prim,ultim;
	long drum[NMax];
	viz[x]=0;
	c[0]=x;
	prim=ultim=0;
	while(prim<=ultim)
	{
		x = c[prim++];
		for(j=1;j<=a[x][0];j++)
			if(viz[a[x][j]]==0)
			{
				viz[a[x][j]]=viz[x]+1;
				c[++ultim]=a[x][j];
			}
	}
	for(i=1;i<=n;i++)
		if(viz[i]==0)
			viz[i]--;
	viz[s]=0;
}

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

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