Cod sursa(job #493239)

Utilizator Cristi09Cristi Cristi09 Data 17 octombrie 2010 16:54:41
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<stdio.h>
#define MAX 1100001
int n,m,cont,v[2][MAX],s,scurt[100001],coada[2][MAX],prim,ultim;
void add(int x,int y)
{
	if(!v[0][x])
	{
		v[1][x] = cont;
	}
	else
	{
		v[1][v[0][x]] = cont;
	}
	v[0][cont] = y;
	v[0][x] = cont;
}
int main()
{
	FILE*f = fopen("bfs.in","r");
	fscanf(f,"%d %d %d",&n,&m,&s);
	int i,a,b;cont = n+1;
	for(i=1;i<=m;++i,++cont)
	{
		fscanf(f,"%d%d",&a,&b);
		add(a,b);
	}
	prim = 1;
	ultim = 2;
	coada[0][prim] = s;
	coada[1][prim] = 0;
	int pas=0;
	while(prim!=ultim)
	{
		pas = coada[1][prim]+1;
		while(v[1][coada[0][prim]])
		{
			coada[0][ultim] = v[0][ v[1][ coada[0][prim] ] ];
			v[1][coada[0][prim]] = v[1][ v[1][coada[0][prim]] ];
			if(scurt[coada[0][ultim]] > pas || !scurt[coada[0][ultim]] && coada[0][ultim]!=s)scurt[coada[0][ultim]] = pas;
			coada[1][ultim] = pas;
			++ultim;
		}
		++prim;
	}
	FILE*g = fopen("bfs.out","w");
	for(i=1;i<=n;++i)
	{
		if(!scurt[i] && i!=s)
			fprintf(g,"-1 ");
		else
			fprintf(g,"%d ",scurt[i]);
	}
	fclose(g);
	return 0;
}