Cod sursa(job #228476)

Utilizator blasterzMircea Dima blasterz Data 7 decembrie 2008 12:57:40
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
using namespace std;
#include <cstdio>
#include <string>
#include <vector>
#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;};

vector<int>a[N];
int n, m,S;
int d[N];


void read()
{
	freopen("bfs.in","r",stdin);
	cit(n);cit(m);cit(S);
	int p, q;
	while(m--)
	{
		cit(p);cit(q);
		a[p].push_back(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;
	vector<int>::iterator it;
	while(p<=q)
	{
		u=Q[p++];
		
		for(it=a[u].begin(); it!=a[u].end(); ++it)
			if(!use[*it])
			{
				Q[++q]=*it;
				use[*it]=1;
				d[*it]=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;
}