八数码难题_广度双向搜索_谁来解释下代码

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:22:34
程序如下:

program num8;
const maxn=4000;
type jid=record
str:string[9];
f:0..maxn;
dep:byte;
end;
bin=0..1;
var c:array[0..1,1..maxn] of ^jid;
head,tail:array[0..1] of integer;
start,goal:string[9];
procedure init;
var i,j:integer;
begin
start:='283164705';
goal:='123804765';
for i:=0 to 1 do
for j:=1 to maxn do
new(c[i,j]);
c[0,1]^.str:=start; c[0,1]^.f:=0; c[0,1]^.dep:=0;
c[1,1]^.str:=goal; c[1,1]^.f:=0; c[1,1]^.dep:=0;
for i:=0 to 1 do
begin head[i]:=0;tail[i]:=1;end;
end;
procedure print(st:bin;tail,k:integer);
procedure print0(m:integer);
begin
if m<>0 then
begin print0(c[0,m]^.f);writeln(c[0,m]^.str) end;
end;
procedure print1(m:integer);
var n:integer;
begin
n:=c[1,m]^.f;
while n<>0 do
begin writeln(c[1,n]^.str); n:=c[1,n

节目num8 ;
常量maxn = 4000人;
类型jid =纪录
个STR :弦[ 9 ] ;
传真: 0 .. maxn ;
环保局:字节;
完;
斌= 0 .. 1 ;
变种C组:阵列[ 0 .. 1,1 .. maxn ] ^ jid ;
头部,尾部:阵列[ 0 .. 1 ]的整数;
首先,目标:弦乐[ 9 ] ;
程序初始化;
变种i , j的:整数;
开始
开始: = '283164705 ' ;
目标: = '123804765 ' ;
我: = 0至1做
律政司司长: = 1至maxn做
新的( c [ i , j的] ) ;
[ 0,1 ] ^ 。个STR : =启动; [ 0,1 ] ^ 。传真: = 0 ; [ 0,1 ] ^ 。环保局: = 0 ;
[ 1,1 ] ^ 。个STR : =目标; [ 1,1 ] ^ 。传真: = 0 ; [ 1,1 ] ^ 。环保局: = 0 ;
我: = 0至1做
开始头[一] : = 0 ;尾巴[一] : = 1 ;完;
完;
程序打印(圣:斌;尾巴,钾:整数) ;
程序print0 (男:整数) ;
开始
如果m < > 0 ,然后
开始print0 (三[ 0 ,男] ^ 。女) ; writeln (三[ 0 ,男] ^ 。个STR )完;
完;
程序print1 (男:整数) ;
变种n :整数;
开始
n : = C的[ 1 ,男] ^使用f ;
当N < > 0做
开始writeln (三[ 1 , n ]由^ 。 str )对氮: = C的[ 1 , n ]由^ F节结束;
完;
开始
如果圣= 0 ,然后
开始writeln ( '一步= ' , [ 0 ,尾巴] ^ 。环保