Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
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:=-N to N do
begin
for y:=-N 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