Cod sursa(job #553552)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 14 martie 2011 09:50:03
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream.h>
ifstream f("bfs.in");
ofstream g("bfs.out");
int n,m,s;
int Coada[100003],color[100003],d[100003],inainte[100003],incep=1,sf=0;

//Liste de adiacenta
struct nod { int nd;
nod *next;
}; nod *L[1000003];

int main()
{
	int i,x,y,u,v;
	nod *p;
	f>>n>>m>>s;
	for(i=1;i<=m;i++)
	{
		f>>x>>y;
		//Lista de adiacenta
		p=new nod;
		p->nd=y;
		p->next = L[x];
		L[x]=p;
		//Matrice de adiacenta		
		//Graf[x][y]=1;
	}
	//Alb-1 ; Gri-2 ; Negru-3
	for(i=1;i<=n;i++)
	{
		color[i]=1;
		d[i]=-1;
		inainte[i]=0;
	}
	color[s]=2;
	d[s]=0;	
	inainte[s]=0;
	Coada[++sf]=s;
	
	while(incep<=sf)
	{
		u=Coada[incep];
		p=L[u];
		while(p)
		{
			if(color[p->nd]==1)
			{
				color[p->nd]=2;
				d[p->nd]=d[u]+1;
				inainte[p->nd]=u;
				Coada[++sf]=p->nd;
			}
			p=p->next;
		}
		incep++;
		color[u]=3;
	}
	
	for(i=1;i<=n;i++)	
		g<<d[i]<<' ';
	g<<'\n';	
	f.close();
	g.close();
	return 0;
}