求8数码问题的A*算法程序(PASCAL语言)

来源:百度知道 编辑:UC知道 时间:2024/05/21 10:02:20
RT 打起来太累 想找个现成的~

输入输出格式无所谓
谢谢liukelk~~

加了40分 把平衡树的也给偶吧~ 谢了~

我只有十五数码的.
你如果再给点分,我就给你个带堆和平衡树的.
program lk_A_3_1;{十五数码}

const
dre:array[1..4,1..2] of shortint=((-1,0),(0,-1),(0,1),(1,0));

type
coo=array[1..2] of shortint;
co=array[0..15] of coo;
node=record
data:co; {表示每一个数码的坐标}
de:shortint;{移动方向1,2,3,4分别表示上,左,右,下}
next,from:pointer;
depth:longint;
f:real;{估价函数值,包括深度}
end;
pointer=^node;

var
ans:co;
ls:array[1..4,1..4] of shortint;{棋盘}
h,t,p,q,v:pointer;
i,j,k,n:longint;
c:shortint;
l:coo;

procedure print;
begin
n:=1;
while q<>nil do
begin
fillchar(ls,sizeof(ls),0);
for k:=0 to 15 do
ls[q^.data[k,1],q^.data[k,2]]:=k;
writeln('Step ',n);
for i:=1 to 4 do
begin
for j:=1 to 4 do
write(ls[i,j]:4);
writeln;