Cod sursa(job #367718)

Utilizator raica_cristiraica dumitru cristian raica_cristi Data 23 noiembrie 2009 11:35:33
Problema BFS - Parcurgere in latime Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include<stdio.h>
#define dim 100100
struct nod
{
       int el;
       nod *next;
} *liste[dim];

int n,s,y,x,st,dr,m;
int  c[dim];
char viz[dim];
int  d[dim];

void add(int x,int y)
{
     nod *p=new nod;
     p->el=y;
     p->next=liste[x];
     liste[x]=p;
     
}

void  read()
{
      scanf("%d%d%d",&n,&m,&s);
      for(int i=1;i<=m;i++)
      {
              scanf("%d%d",&x,&y);
              add(x,y);
              }
}

void solve()
{    nod *p = new nod ;
     c[dr]=s;
     dr++;
     int ant=s;
     while(dr>st)
     {
                ant=c[st];
                p=liste[c[st]];
            do
            {
                if(viz[p->el]==0)
                {viz[p->el]=1;
                                    d[p->el]=d[ant]+1;
                                    c[dr++]=p->el;
                }
                     p=p->next;
                     } while(p);
                     st++;
             }
}
int main ()
{
    int i;
    freopen("bfs.in","r",stdin);
    freopen("bfs.out","w",stdout);
    read();
    d[s]=0;
    viz[s]=1;
    solve();
    for(i=1;i<=n;i++)
    {
                     if(d[i]==0 && i!=s)
                     printf("-1 ");
                     else
                     printf("%d ",d[i]);
                     }
    printf("\n");
    return 0;
}