Cod sursa(job #538929)

Utilizator ShikaMonaVieriu Ramona ShikaMona Data 22 februarie 2011 09:31:09
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream.h>
# define NM 100001
ifstream in("bfs.in");
ofstream out("bfs.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;
 }