Cod sursa(job #935374)

Utilizator rudarelLup Ionut rudarel Data 3 aprilie 2013 09:54:13
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#define MAX 100010

struct nod {
     int info;
     nod *next;
};

nod *g[MAX]; 
int n,m,s;
int rez[MAX],c[MAX],nr;
 
void Add(int i,int j)
{
     nod *q = new nod;
     q->info = j;
     q->next = g[i];
     g[i] = q;
}
 
void Read()
{
     int x, y;
     freopen("bfs.in","r",stdin);
     scanf("%d %d %d",&n,&m,&s);
     for (int i = 0;i < m; i++)
     {
          scanf("%d %d",&x,&y);
          Add(x,y);
     }
}
 
void BFS()
{
     int i;
     for (i = 0;i <= n; i++ )
          rez[i] = -1;
     c[nr++] = s;
     rez[s]=0; 
     for (i = 0; i < nr; i++)
     {
          for (nod *j = g[c[i]]; j ; j = j->next)
               if (rez[j->info] == -1)
               {
                    rez[j->info] = rez[c[i]] + 1;
                    c[nr++] = j->info;
               }
     }
}
 
void Write()
{
     freopen("bfs.out","w",stdout);
     for (int i = 1; i <= n; i++)
          printf("%d ",rez[i]);
}
 
int main ()
{
     Read();
     BFS();
     Write();
     return 0;
}