Cod sursa(job #678705)

Utilizator alexapoApostol Alexandru Ionut alexapo Data 12 februarie 2012 11:46:10
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
struct nod
{
	int x;
	nod *urm;
}*v[100005];
nod *p;
int i,n,a,m,b,s,alb[100005],gri[100005],ok,negru[100005];
int main()
{
	f>>n>>m>>s;
	for(i=1;i<=m;i++)
	{
		f>>a>>b;
		p= new nod;
		p->x=b;
		p->urm=v[a];
		v[a]=p;
	}
	ok=1;
	gri[s]=1;
	int pas=1;
	while(ok)
	{
		ok=0;
		for(i=1;i<=n;i++)
			if(gri[i]&&!negru[i])
			{
				negru[i]+=pas;
				p=v[i];
				while(p)
				{
					alb[p->x]=1;
					p=p->urm;
				}
				ok=1;
			}
			for(i=1;i<=n;i++)
				if(alb[i])
					gri[i]=1;
				pas++;
	}
	for(i=1;i<=n;i++)
		negru[i]--;
	for(i=1;i<n;i++)
		g<<negru[i]<<' ';
	g<<negru[n]<<'\n';

	f.close();
	g.close();
	return 0;
}