Cod sursa(job #238072)

Utilizator zbarniZajzon Barna zbarni Data 31 decembrie 2008 14:01:18
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<stdio.h>
#include<stdlib.h>
#define max 100003
int *a[max],list[max],viz[max];
int n,m,s;
void bfs(int x)
 {
  int e,v,i;
  e=v=0;
  list[0]=x;
  while (e<=v)
   {
    x=list[e++];
    for (i=1;i<=a[x][0];i++)
     if (!viz[a[x][i]] && a[x][i]!=s)
      {
       viz[a[x][i]]=viz[x]+1;
       list[++v]=a[x][i];
      }
   }
 }

int main()
 {
  freopen("bfs.in","r",stdin);
  freopen("bfs.out","w",stdout);
  int i,x,y;
  scanf("%d %d %d",&n,&m,&s);
  viz[s]=0;
  for (i=1;i<=n;i++)
   {
    a[i]=(int *)realloc(a[i],sizeof(int));
    a[i][0]=0;
   }
  for (i=1;i<=m;i++)
   {
    scanf("%d %d",&x,&y);
    a[x][0]++;
    a[x]=(int *)realloc(a[x],(a[x][0]+1)*sizeof(int));
    a[x][a[x][0]]=y;
   }
  bfs(s);
  for (i=1;i<=n;i++)
    if (!viz[i])
    {
     if (i==s)
      printf("0 ");
     else
      printf("-1 ");
    }
    else
     printf("%d ",viz[i]);
  printf("\n");
  return 0;
 }