Cod sursa(job #677519)

Utilizator legendarulDavid Anton Erculescu legendarul Data 10 februarie 2012 12:18:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<fstream>
using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

int m,n,s,c[100001],viz[1000001],li=1,ls,d[100001];
struct nod{
					 int info;
					 nod *next;
					};
nod* la[100001];

void add(int x,int y)
{ nod *n=new(nod);
	n->info=y;
	n->next=la[x];
	la[x]=n;
}

void citire()
{ in>>n>>m>>s;
	int x,y;
	for(int i=1;i<=m;i++)
	{ in>>x>>y;
		add(x,y);
	}
}

int cv()
{ return li>ls;
}

void pune(int x)
{ c[++ls]=x;
}

void scoate(int &x)
{ x=c[li++];
}

void bf(int s)
{ pune(s);
	viz[s]=1;
	while(!cv())
	{ int x;
		scoate(x);
		nod *nc=la[x];
		while(nc)
		{ int y=nc->info;
			if(!viz[y])
			{ pune(y);
				viz[y]=1;
				d[y]=d[x]+1;
			}
			nc=nc->next;
		}
	}
}

int main()
{ citire();
	bf(s);
	for(int i=1;i<=n;i++)
	{ if(d[i]==0&&i!=s)
		{ d[i]=-1;
		}
	}
	for(int i=1;i<=n;i++)
	{ out<<d[i]<<" ";
	}
}