pascal解八数码难题

来源:百度知道 编辑:UC知道 时间:2024/05/16 18:00:44

program ex12;
type
block=array[1..3,1..3]of byte;
rec=record
map:block;
bx,by:byte;
father:longint;
step,point:longint;
end;
const
start:block=((1,4,7),
(0,8,9),
(2,3,6));
finish:block=((0,4,7),
(1,2,9),
(3,8,6));
x:array[1..4]of integer=(-1,0,1,0);
y:array[1..4]of integer=(0,1,0,-1);
w:integer=0;
var
notes:array[1..300000]of rec;
open,close:integer;
procedure getpoint(t:integer);
var
i,j:byte;k:integer;
begin
k:=0;
for i:=1 to 3 do
for j:=1 to 3 do
begin
if(finish[i,j]>0)and(notes[t].map[i,j]<>finish[i,j])then inc(k)
end;
notes[t].point:=notes[t].step+k;
end;

procedure init;
var
i,j:byte;
begin
with notes[1] do
begin
ma