Cod sursa(job #288066)

Utilizator dReaMerAndrei Sofian dReaMer Data 25 martie 2009 15:19:01
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
# include <stdio.h>
# include<string.h>   
struct lista{
	int inf;
	lista *adr;
};   
lista *v[100010];   
int i,x,y,m,start,n,cost[100010],s[100010];   

void adauga(int i, int j){
	lista *c=new lista;   
    c->inf=j;   
    c->adr=v[i];   
    v[i]=c;   
 }   

void bfs(int x){   
	int i,L;   
    lista *p;   
    memset(cost,-1,sizeof(cost));   
    L=1;   
    s[L]=x; cost[x]=0;   
    for(i=1;i<=L;i++)   
        for(p=v[s[i]];p;p=p->adr)   
			if(cost[p->inf]==-1){
				s[++L]=p->inf;   
				cost[s[L]]=cost[s[i]]+1;   
			}   
}  

int main(){
	freopen("bfs.in","r",stdin);   
	freopen("bfs.out","w",stdout);   
	scanf("%d%d%d",&n,&m,&start);   
	for(i=1;i<=m;i++){
		scanf("%d%d",&x,&y); 
		adauga(x,y); 
	}   
	bfs(start);   
	for(i=1;i<=n;i++) 
		printf("%d ",cost[i]);   
	return 0;
}