Cod sursa(job #1047079)

Utilizator vyrtusRadu Criuleni vyrtus Data 3 decembrie 2013 21:30:03
Problema BFS - Parcurgere in latime Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.16 kb
Program parcurgere_in_latime;
 type drum=record
          x,y:longint;
          end;
       rez=record
         t,k:longint;
         end;
  var a:array[1..1000000] of drum;
     q:array[1..1000000] of rez;
     v:array[1..100000] of longint;
     parcurs:array[1..100000] of boolean;
   i,n,m,b,l,r:longint;
   f,g:text;

BEGIN
   assign(f,'BFS.in'); reset(f);
   assign(g,'BFS.out'); rewrite(g);
   read(f,n,m,b);
    for i:=1 to m do
     begin
      read(f,a[i].x,a[i].y);
      parcurs[i]:=false;
      v[i]:=0;
     end;

  l:=1; r:=2;
   v[b]:=0; parcurs[b]:=true; q[l].t:=b; q[l].k:=0;

   while (l<r) do
    begin
      for i:=1 to m do
       begin
         if (a[i].x=q[l].t) then
           if (not(parcurs[a[i].y])) then
            begin
             q[r].t:=a[i].y;
             q[r].k:=q[l].k+1;
             parcurs[a[i].y]:=true;
             v[a[i].y]:=q[r].k;
             inc(r);
            end;
       end;
     inc(l);
    end;

   for i:=1 to n do
    begin
     if ((v[i]=0) and (i<>b)) then write(g,'-1 ')
                                else write(g,v[i],' ');

    end;

   close(f); close(g);
END.