Cod sursa(job #538958)

Utilizator luci92bestFainisi Lucian Constantin luci92best Data 22 februarie 2011 09:49:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream.h>
#define NM 100001

ifstream fin("bfs.in");
ofstream fout("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;
fin>>n>>m>>start;
for(i=1;i<=m;i++){
fin>>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++)
		fout<<d[i]<<" ";
	return 0;
}