Cod sursa(job #832747)

Utilizator tgistvanTorok Istvan tgistvan Data 11 decembrie 2012 12:03:09
Problema Barbar Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.07 kb
 type sark=record
           x,y:integer;
           end;

      mat=array[0..1000,0..1000]of integer;

      sor=array[0..1000] of sark;

 var a:mat;
     d:sor;
     c:char;
     n,m,i,j,bei,bej,kii,kij,k:integer;
     f,g:text;

 procedure jbfl(x,y:integer);
 var i,j:integer;
 begin
 if (x>0)and(y>0) then begin

 if(a[x,y-1]>=0)and(a[x,y-1]>a[x,y]+1) then begin jbfl(x,y-1); a[x,y-1]:=a[x,y]+1; end;
 if(a[x,y+1]>=0)and(a[x,y+1]>a[x,y]+1) then begin jbfl(x,y+1); a[x,y+1]:=a[x,y]+1; end;
 if(a[x-1,y]>=0)and(a[x-1,y]>a[x,y]+1) then begin jbfl(x-1,y); a[x-1,y]:=a[x,y]+1; end;
 if(a[x+1,y]>=0)and(a[x+1,y]>a[x,y]+1) then begin jbfl(x+1,y); a[x+1,y]:=a[x,y]+1; end;

 end;

 end;






 begin

 assign(f,'barbar.in'); reset(f);
 read(f,n,m);

 for i:=1 to n do
 for j:=1 to m do  a[i,j]:=maxint;



 k:=0;
 for i:=1 to n do begin readln(f);
     for j:=1 to m do begin
                      read(f,c);
                      if c='*' then a[i,j]:=-9
                      else
                      if c='D' then begin a[i,j]:=-2;
                                    inc(k);
                                    d[k].x:=i;
                                    d[k].y:=j;
                                    end
                      else
                      if c='O' then begin
                                    kii:=i;
                                    kij:=j;
                                    a[i,j]:=-1
                                    end
                      else if c='I' then  begin
                                          a[i,j]:=0;
                                          bei:=i;
                                          bej:=j;
                                          end;

                      end;
                  end;
 close(f);


 for i:=1 to n do begin writeln;
 for j:=1 to m do write(a[i,j]:7);
 end;
 writeln;
 writeln('elvegzi es : ');


 jbfl(bei,bej);



 for i:=1 to n do begin writeln;
 for j:=1 to m do write(a[i,j]:3);
 end;

 assign(g,'Barbar.out'); rewrite (g);

 close(g);
 end.