Cod sursa(job #247486)

Utilizator ZillaMathe Bogdan Zilla Data 23 ianuarie 2009 08:51:24
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <stdio.h>

struct elem
{
	int nod;
	elem *next;
};
elem *p[100001];

int vizitat_bf[100001],inceput=1,sfarsit=1,pasi[100001],coada[100001];

void adauga(int j,int k)
{
	elem *newel=new elem;
	newel->nod=k;
	if (p[j]==NULL)
		{
			p[j]=newel;
			newel->next=NULL;
		}
	else
		{
			newel->next=p[j];
			p[j]=newel;
		}
}


void  BF(int x)
{
    while(inceput <= sfarsit)
        {
            elem *current=p[coada[inceput]];           
            while(current!=NULL)
                {
                    if(vizitat_bf[current->nod]==0)
                        {
                            coada[++sfarsit]=current->nod;
                            pasi[current->nod]=pasi[coada[inceput]]+1;
                            vizitat_bf[current->nod]=1;
                            ++sfarsit;
                        }
                    current=current->next;
                }
            ++inceput;
        }   
}

int main()
{
    int n,m,s,i,x,y;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%d%d%d",&n,&m,&s);
    for(i=1;i<=m;++i)
        {
            scanf("%d%d",&x,&y);
            adauga(x,y);
        }
    coada[1]=s;
	vizitat_bf[s]=1;
	BF(s);
	for(i=1;i<=n;++i)
	   {
            if(pasi[i]==0)
                {
                    if(i==s)
                        printf("0 ");
                    else
                        printf("-1 ");
                }
            else
                printf("%d ",pasi[i]);
        }
    return 0;    
}