Cod sursa(job #347811)

Utilizator florin_marius90Florin Marius Popescu florin_marius90 Data 13 septembrie 2009 13:09:02
Problema BFS - Parcurgere in latime Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.23 kb
type nod=^node;
    node=record
         x,cost:longint;
         next:nod;
         end;
var d:array[1..100000] of nod;
    costitza:array[1..100000] of longint;
    sol:array[1..100000] of longint;
    vizitat:array[1..100000] of boolean;
    i,n,w,t,m,s,a,b,c:longint;
    f,g:text;
    p,q:nod;
function min(a,b:longint):longint;
begin
if a<b then min:=a else min:=b;
end;
begin
assign(f,'bfs.in'); reset(f);
assign(g,'bfs.out'); rewrite(g);
readln(f,n,m,s);
{for i:=1 to n do costitza[i]:=-1;}
for i:=1 to m do
 begin
 readln(f,a,b);
  new(p);
 p^.x:=b;
 p^.cost:=1;
 p^.next:=d[a];
 d[a]:=p;
 {new(p);
 p^.x:=a;
 p^.next:=d[b];
 d[b]:=p;}
 end;
 i:=1; t:=1; sol[i]:=s;   costitza[s]:=0;  vizitat[s]:=false;
 while i<=t do
  begin
  w:=sol[i];
  q:=d[w];
  while  q<>nil do
   begin
   if vizitat[q^.x]=true then begin t:=t+1; sol[t]:=q^.x;
                                   costitza[q^.x]:=costitza[w]+1;
                                   vizitat[q^.x]:=false;
                                     end  ;
   { else begin costitza[q^.x]:=min(costitza[q^.x],costitza[w]+q^.cost) end;}
   q:=q^.next;
   end;
   i:=i+1;

  end;
for i:=1 to n do
 write(g,costitza[i],' ');
 close(f); close(g); end.