Cod sursa(job #228473)

Utilizator blasterzMircea Dima blasterz Data 7 decembrie 2008 12:54:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <string>
#define N 100001
#define DIM 8192

char ax[DIM];
int pz;

inline void cit(int &x)
{
	x=0;
	while(ax[pz]<'0' || ax[pz]>'9')
		if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
	
	while(ax[pz]>='0' && ax[pz]<='9')
	{
		x=x*10+ax[pz]-'0';
		if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
	}
}


struct nod { int x; nod *n;};

nod *a[N];
int n, m,S;
int d[N];

inline void add(int i, int j)
{
	nod *p=new nod;
	p->x=j;
	p->n=a[i];
	a[i]=p;
}

void read()
{
	freopen("bfs.in","r",stdin);
	cit(n);cit(m);cit(S);
	int p, q;
	while(m--)
	{
		cit(p);cit(q);
		add(p,q);
	}
	
}

void solve()
{
	bool use[N];
	int Q[N], p=0, q=0,u,i;
	memset(use, 0, sizeof(use));
	memset(d, 0x3f3f3f3f, sizeof(d));
	Q[0]=S;
	use[S]=1;
	d[S]=0;
	nod *it;
	while(p<=q)
	{
		u=Q[p++];
		
		for(it=a[u]; it; it=it->n)
			if(!use[it->x])
			{
				Q[++q]=it->x;
				use[it->x]=1;
				d[it->x]=d[u]+1;
			}
	}
	
	freopen("bfs.out","w",stdout);
	for(i=1;i<=n;++i) if(d[i]==0x3f3f3f3f) d[i]=-1;
	for(i=1;i<=n;++i)printf("%d ", d[i]);
	
	
	
}
int main()
{
	read();
	solve();
	return 0;
}