Cod sursa(job #395512)

Utilizator SzabiVajda Szabolcs Szabi Data 13 februarie 2010 13:08:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <string.h>

int n,m,s,eredmeny[100001];
bool vazut[100001];

struct adat{
int x;
adat *kov;
adat(){kov=0;}
};

struct adat2{
int x,tav;
adat2 *kov;
adat2(){kov=0;}
};

adat *a[100001];
adat2 *elso,*utolso;

void add(int x,int y){
adat *p=new adat;
p->x=y;
p->kov=a[x];
a[x]=p;
}

void vizsgal(int x,int y){
adat *p;
adat2 *seged;
p=a[x];
eredmeny[x]=y;


while(p!=0){
	if(!vazut[p->x]){vazut[p->x]=1;
	seged=new adat2;
	seged->x=p->x;
	seged->tav=y+1;
	utolso->kov=seged;
	utolso=seged;
	}
	p=p->kov;
}

}

int main(){
freopen("bfs.in","r",stdin);
freopen("bfs.out","w",stdout);
int i,temp1,temp2;
adat2 *seged;

scanf("%d %d %d",&n,&m,&s);
for(i=1;i<=m;i++){
scanf("%d %d",&temp1,&temp2);
add(temp1,temp2);
}

for(i=1;i<=n;i++){eredmeny[i]=-1;}

elso=new adat2;
utolso=elso;
elso->x=s;
elso->tav=0;



do{
vizsgal(elso->x,elso->tav);
seged=elso;
elso=elso->kov;
delete seged;
}while(elso!=0);

eredmeny[s]=0;

for(i=1;i<=n;i++){printf("%d ",eredmeny[i]);}

return 0;
}