Cod sursa(job #315207)

Utilizator stanesealexStanese Alex stanesealex Data 14 mai 2009 19:40:31
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<cstdio>

using namespace std;

struct graf
{
	int a;
	graf *next;
};
graf *x[100010],*ult[100010];
int c[100010],viz[100010],cost[100010];
int main()
{
	int n,m,s,i,u,y;
	graf *p;
	FILE *f=fopen("bfs.in","r");
	FILE *g=fopen("bfs.out","w");
	fscanf(f,"%d %d %d ",&n,&m,&s);
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d %d ",&u,&y);
		if (x[u]==NULL)
		{
			p=new graf;
			p->next=NULL;
			p->a=y;
			ult[u]=p;
			x[u]=p;
		}
		else
		{
			p=new graf;
			p->a=y;
			ult[u]->next=p;
			p->next=NULL;
			ult[u]=p;
		}
	}
	c[1]=s;
	i=1;
	cost[s]=0;
	viz[s]=1;
	u=1;
	p=new graf;
	p=x[s];
	while (i<=u)
	{
		while (p)
		{
			if (viz[p->a]==0)
			{
				u++;
				c[u]=p->a;
				viz[p->a]=1;
				cost[p->a]=cost[c[i]]+1;
			}
			p=p->next;
		}
	i++;	
	p=x[c[i]];	
	}
	for (i=1;i<=n;i++)
		if(viz[i]==0)
			fprintf(g,"%d ",-1);
		else fprintf(g,"%d ",cost[i]);
		fclose(f);
		fclose(g);
	return 0;

}