Cod sursa(job #268039)

Utilizator cristikIvan Cristian cristik Data 28 februarie 2009 17:51:13
Problema BFS - Parcurgere in latime Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>
#include <string.h>
struct lista
{
    long nod;
    struct lista *urm;
};
lista *g[100001];
long n,m,t[100001],d[100001],c[100001],timp;
char u[100001];
void adauga(long i,long j)
{
    lista *p;
    p=new lista;
    p->nod=j;
    p->urm=g[i];
    g[i]=p;
}
void bf(int start)
{
    lista *p;
    int nod,st,dr;
    memset(u,0,sizeof(u));
    st=dr=1;
    c[st]=start;
    u[start]=1;
    for(d[start]=0; st<=dr; st++)
    {
        nod=c[st];
        for(p=g[nod]; p!=NULL;p=p->urm)
         if(!u[p->nod])
         {
             u[c[++dr]=p->nod]=1;
             d[p->nod]=d[nod]+1;
             t[p->nod]=nod;
         }
    }
}
int main()
{
    long i,j,k,s;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    scanf("%ld %ld %ld",&n,&m,&s); k=m;
    for(; k>0; k--)
     {
         scanf("%ld %ld",&i,&j);
         adauga(i,j);
         adauga(j,i);
     }
    bf(s);
    for(i=1; i<=n; i++)
     {
         if(s!=i && !d[i]) printf("-1 ");
         else printf("%ld ",d[i]);
     }
    return 0;
}