Informatika gyűjtemény

Egy szinttel feljebb pt_hatszog.pas

2004050607080910

NézetNyomtat

pt_hatszog.pas (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: us-ascii
Méret: 2 KB
program hatszog;

const maxN  = 80;
      INF   = -1;

type  TMezo   = record
                  h,d:integer;
                end;
      TTabla  = array[-(maxN+1)..maxN+1,-(maxN+1)..maxN+1] of TMezo;
      TPont   = record
                  i,k:integer;
                end;
      PElem   = ^TElem;
      TElem   = record
                  p:TPont;
                  n:PElem;
                end;
      TSor    = object
                  e,v:PElem;
                  procedure be(p:TPont);
                  function ki:TPont;
                  procedure init;
                  procedure kill;
                  function ures:boolean;
                end;
      
      
      
var   t:TTabla;
      n:byte;
      si,sk,ci,ck,sj,cj:integer;




procedure load;
var x,y,i,k:integer;
begin
  readln(N);
  
  for x:=-(N+1) to N+1 do
    for y:=-(N+1) to N+1 do
      begin
        t[x,y].h:=0;
        t[x,y].d:=INF;
      end;
  
  
  for x:=-(N-1) to N-1 do
    begin
      for y:=1 to 2*N-(abs(x)+1) do
        begin
          i:=x;
          if i<=0 then k:=N-1-(y-1) else k:=N-1-x-(y-1);
          read(t[i,-k].h);         
        end;
      readln;
    end;
  readln(si,sj,sk,ci,cj,ck);
  sk:=-sk;
  ck:=-ck;    
end;

procedure dump;
var x,y:integer;
begin
  for x:=-to N do
    begin
      for y:=-to N do
        begin
          write(t[x,y].h);
        end;
      writeln;
    end;
end;

procedure TSor.init;
begin
  e:=nil;
  v:=nil;
end;

procedure TSor.be(p:TPont);
var m:PElem;
begin
  new(m);
  m^.p:=p;
  m^.n:=nil;
  
  if e=nil then
    begin
      e:=m;
      v:=m;
    end else
    begin
      v^.n:=m;
      v:=m;
    end; 
end;

function TSor.ki:TPont;
var m:PElem;
begin
  m:=e;
  e:=e^.n;  
  ki:=m^.p;
  dispose(m);  
end;


procedure TSor.kill;
var m:PElem;
begin
  while e<>nil do
    begin
      m:=e;
      e:=e^.n;
      dispose(m);
    end;
  e:=nil;
  v:=nil;
end;

function TSor.ures:boolean;
begin
  ures:=(e=nil);
end;

function sz(p:TPont;x:byte):TPont;
begin
  case x of
    1:dec(p.i);
    2:dec(p.i);
    5:inc(p.i);
    6:inc(p.i);
  end;
  case x of
    1:dec(p.k);
    3:dec(p.k);
    4:inc(p.k);
    6:inc(p.k);
  end;
  sz:=p;
end;

procedure bejar;
var s:TSor;
    p0,p,q:TPont;
    x:byte;
begin
  s.init;
  p0.i:=si;
  p0.k:=sk;
  s.be(p0);
  t[p0.i,p0.k].d:=0;
  while not(s.ures) do
    begin
      p:=s.ki;
      for x:=1 to 6 do
        begin
          q:=sz(p,x);
          if (t[q.i,q.k].d=INF)and(t[q.i,q.k].h=t[p0.i,p0.k].h) then
            begin
              t[q.i,q.k].d:=t[p.i,p.k].d+1;
              s.be(q);
            end;
        end;
    end;
  s.kill;  
end;

begin
  load;
  bejar;
  writeln(t[ci,ck].d);
end.of.program
(Vissza)