Cod sursa(job #2308182)

Utilizator parsulPaul Cristian Banu-Taran parsul Data 26 decembrie 2018 15:17:34
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>
#include <cstdlib>
using namespace std;
 int n,m;
 int *g[100000],deg[100000],a,b,x,y,d[100000],c;char u[100000];;
int bfs()
{int q[100000],p1,p2,*p;

u[q[p1=p2=0]=x]=1;
 d[x]=0;
for(;p1<=p2;p1++)

 for(p=g[q[p1]];*p!=-1;p++)

  if(!u[*p]) {d[*p]=d[q[p1]]+1;u[q[++p2]=*p]=1;
   }

}
int main()
{
     freopen ("bfs.in","r",stdin);
     freopen ("bfs.out","w",stdout);
     scanf("%d %d %d",&n,&m,&x);
     for(;m;m--)
      {scanf("%d %d ",&a,&b);
       a--;deg[a]++;}
     for (int i = 0; i < n; i++)
{
       g[i] = (int *) malloc((deg[i]+1)*sizeof(int));

      g[i][deg[i]] = -1;
       deg[i] = 0;
 }
     fseek(stdin,0,SEEK_SET);
     scanf("%d %d %d ",&n,&m,&x);   x--;
     for(;m;m--)
      {scanf("%d %d",&a,&b);   a--;b--;
        g[a][deg[a]++]=b;
                    }
     bfs();
    for(int i=0;i<n;i++) { if(d[i]==0 && x!=i) d[i]=-1;
    printf("%d ",d[i]);
                           }



      return 0;
}