Cod sursa(job #677507)

Utilizator andy_cool977VALEANU ANDREI GABRIEL andy_cool977 Data 10 februarie 2012 12:12:52
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream.h>
ifstream in("bfs.in");
ofstream out("bfs.out");

#define NM 1000000

int c[NM],viz[NM],d[NM],n,m,start,li=1,ls;
struct nod
	{int x;
	 nod *next;};

nod* v[NM];
void add(nod *&l,int x)
{
nod* n=new(nod);
n->x=x;
n->next=l;
l=n;
}

int vida()
{
return ls<li;
}

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

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

void build()
{
int i,a,b;
in>>n>>m>>start;
for(i=1;i<=m;i++)
	{in>>a>>b;
	 add(v[a],b);
	}

}

void bf(int start)
{
int a,b;
nod *nc;
pune(start),viz[start]=1;
while(!vida()){scoate(a);
							 nc=v[a];
							 while(nc){b=nc->x;
												 if(!viz[b]){pune(b);
																		 viz[b]=1;
																		 d[b]=d[a]+1;
																		 }
												 nc=nc->next;
												 }
							 }
}

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