Cod sursa(job #538932)

Utilizator roboskatercimpoesu robert roboskater Data 22 februarie 2011 09:31:56
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream.h>
#define NM 100001
ifstream in("bfs.in");
ofstream out("bfs.out");

int c[NM],viz[NM],d[NM],n,m,s,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>>s;
	for(i=1;i<=m;i++){
		in>>a>>b;
		add(v[a],b);
		}
}

void bf(int s){
int a,b;
nod *nc;
pune(s);viz[s]=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(s);
for(i=1;i<=n;i++)
	if(d[i]==0&&i!=s)
					d[i]=-1;
for(i=1;i<=n;i++)
					out<<d[i]<<" ";
return 0;
}