Cod sursa(job #538937)

Utilizator sorin_trifu2oo9trifu sorin sorin_trifu2oo9 Data 22 februarie 2011 09:34:44
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream.h>
#define NM 100001

ifstream in("bsf.in");
ofstream out("bsf.out");
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 c_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(!c_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;
}