Cod sursa(job #345762)

Utilizator sapiensCernov Vladimir sapiens Data 4 septembrie 2009 17:42:05
Problema BFS - Parcurgere in latime Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 1.2 kb
Program bfs;
 type list = ^cell;
      cell = record no:longint; ne:list; end;
 var f,g:text; a:array[1..100000,1..2]of list;
     b:array[1..100000]of boolean;
     c:array[1..100000]of longint;
     i,j,k,n,m,s:longint; l,ls,lf:list;
 begin
  assign (f,'bfs.in'); reset (f);
  assign (g,'bfs.out'); rewrite (g);
  readln (f,n,m,s);
  for i:=1 to n do a[i,1]:=nil;
  for i:=1 to m do begin
    readln (f,j,k);
    if a[j,1]=nil then begin
      new (a[j,1]);
      a[j,1]^.no:=k;
      a[j,1]^.ne:=nil;
      a[j,2]:=a[j,1];
    end else begin
      new (a[j,2]^.ne);
      a[j,2]:=a[j,2]^.ne;
      a[j,2]^.no:=k;
      a[j,2]^.ne:=nil;
    end;
  end;
  new (ls); ls^.no:=s; ls^.ne:=nil; lf:=ls;
  b[s]:=true; c[s]:=1;
  while ls<>nil do begin
    j:=ls^.no;
    a[j,2]:=a[j,1];
    while a[j,2]<>nil do begin
      if not b[a[j,2]^.no] then begin
        new (lf^.ne);
        lf:=lf^.ne;
        lf^.no:=a[j,2]^.no;
        lf^.ne:=nil;
        b[a[j,2]^.no]:=true;
        c[a[j,2]^.no]:=c[j]+1;
      end;
      a[j,2]:=a[j,2]^.ne;
    end;
    l:=ls^.ne;
    dispose (ls);
    ls:=l;
  end;
  for i:=1 to n do write (g,c[i]-1,' '); writeln (g);
  close (f); close (g);
 end.