初状态 0 1 23 4 56 7 8末状态 8 7 65 4 32 1 00表示空格,问最少要几步,可由初到末?

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/29 22:34:24

初状态 0 1 23 4 56 7 8末状态 8 7 65 4 32 1 00表示空格,问最少要几步,可由初到末?
初状态 0 1 2
3 4 5
6 7 8
末状态 8 7 6
5 4 3
2 1 0
0表示空格,问最少要几步,可由初到末?

初状态 0 1 23 4 56 7 8末状态 8 7 65 4 32 1 00表示空格,问最少要几步,可由初到末?
012...312...312...312...312...312...310...301
345->045->645->645->645->640->642->642
678...678...078...708...780...785...780...785

031...631...631...631...631...631...630...603
642->042->742->742->742->740->741->741
785...785...085...805...850...852...852...852

063...763...763...763...763...763...760...706
741->041->841->841->841->840->843->843
852...852...052...502...520...521...521...521

076...876...876...876...876
843->043->543->543->543
521...521...021...201...210
共28步
请注意回答时间···

这个属于xo

不懂

program num8_str1;
uses Crt;
type a33:array[1..3,1..3] Of byte;
{3X3的二维数组,用于存放棋盘布局}
a4=array[1..4] of shortint;
node=record {定义数据库中每个元素记录类型结构}
ch: a33;
si, sj: byte;...

全部展开

program num8_str1;
uses Crt;
type a33:array[1..3,1..3] Of byte;
{3X3的二维数组,用于存放棋盘布局}
a4=array[1..4] of shortint;
node=record {定义数据库中每个元素记录类型结构}
ch: a33;
si, sj: byte;
pnt, dep: byte;
end;
const goal:a33 = ((1,2,3), (8,0,4), (7,6,5)); {目标布局}
start:a33 =((2,8,3), (1,6,4), (7,0,5)); {初始布局}
di:a4=(0,-1, 0, 1);
dj:a4=(-1, 0, 1, 0);
var data:array[1..100] of node;
temp: node;
r, k, ni, nj, Head, Tail, depth: integer;
{变量depth存放当前搜索深度}
function check(k: integer) :boolean; { 检查某步移动是否可行}
begin
hi:=temp.si+di[k] ; nj:=temp.sj+dj[k];
if (ni in [1..3]) and (nj in [1..3]) {~移动后新位置仍在棋盘中}
then check:=true else check:= false;
end;
function dupe: boolean; { 检查队尾新存入布局是否已在队列中存在}
var i,j, k: integer;
buf:boolean;
Begin
buf:= false; i: = 0;
{变量将i依次指向队列中的各个布局(最后一个除外)的位置}
repeat
inc(i) ;buf:= true;
for j:=1 to 3 do
for k:=1 to 3 do
if data[i].ch[j,k] < >data[tail].ch[j,k]
{data[tail]是队列中最后一个元素,即新产生的布局}
then bur:= false;
until buf or (i> = tail-1);
{buf=truee新布局与队列中布局有重复}
dupe:= buf
end;
function goals: boolean; { 比较是否达到目标布局状态}
var i,j :byte;
begin
goals:= true;
for i:=1 to 3 do
for j:=1 to 3 do
if data[tail].ch[i,j] < >goa1[i,j]
then goals:=false {未达到目标布局}
end;
procedure trace;
var i,j :byte;
begin
write( 'cl=', Head,' op=', tail);
writeln('dep=',depth,'k=',k);
fori:=1 to 3 do
begin
for j:= 1 to 3 do write(data[tail], ch[i,j]);
writeln end;
end;
procedure print; {输出移动步骤}
var buf: array[1..100] of integer;
{数组buf存放起始态、目标态以及从起始态到目标态所经过的各态的位置}
i,j, k, n: integer;
begin
n:= 1;
i:= tail;buf[1]:= i; {buf[1]中是目标布局在队列中位置}
repeat
j:=data[i].pnt; {data[I].pnt的值是布局I的父结点的位置}
inc(n); buf[n]:=j; i:=j
until i=0; {根结点(初态)的父结点为0,即I=0}
writeln(' staps:', depth + 1);
for i:= 1 to 3 do {打印棋盘布局}
begin
for k:=n-1 down to 1 do
begin
for j:= 1 to 3 do write(data[buf[k]].ch[i,j]);
if i = 2 then write( ' - > ') else write(' ');
end;
writeln;
end;
readln; halt
end;
{ main program = }
begin
Head:= 0; tail:= 1;
with data[1] do {队列中存入第一个元素(初始状态)}
begin ch:= start; si:= 3; sj:= 2;
pnt:= 0; dep:= 0;
end;
repeat
inc(Head);temp:=data[Head]; {取队首记录}
depth:= temp.dep;
for r:= 1 to 4 do {对取出记录进行扩展}
if check(r) then {布局中空格向某方向移动成功}
begin
inc(tail);data[tail]:= temp; {新产生布局存入队尾}
with data[tail] do
begin ch[si,si]:= ch[nj,nj];
ch[ni,nj]:=0;si:=nj;si:=nj;
pnt:=Head;{记录此布局的上一布局在队列中的位置}
dep:= depth + 1;{记录本布局的搜索深度}
end;
trace;
if dupe then dec(tail) {dec(tail删除新产生的结点)}
else if goals then print;
end;
until Head>=tail; {队列空}
writeln('no solution');readln
end

收起

好难

不会...

去问老师

好难!好难!

好难

初状态 0 1 23 4 56 7 8末状态 8 7 65 4 32 1 00表示空格,问最少要几步,可由初到末? 衣柜中的樟脑丸过一段时间变小了?初状态,末状态, 高中物理中变化量是不是一定正值rt还是一定是末状态减初状态? 某密闭气体的体积从8L等温压缩到6L,压强增加了2x10^4Pa,则该气体初状态的压强为某密闭气体的体积从8L等温压缩到6L,压强增加了2x10^4Pa,则该气体初状态的压强为 Pa,末状态的压强为 Pa. 机械能损失等问题初始状态,还有末状态.什么时候用初状态的机械能减末状态的机械能?什么时候又是末状态减去初状态?例如 动能定理是 末减初还有机械能损失 就是 初减末 (为啥不是末减 急!问一道关于导数的数学题,在线等!已知点M做直线运动,由始点起经过t s后的路程为s=1/4t^4-4t^3+16t^2,则速度为零的时刻是( )A.4s末 B 8s末 C 0s末,8s末 D 0s末,4s末,8s末答案选D,可不知道为什么, 某物体作匀变速直线运动某物体作匀变速直线运动,第2s末的速度为4m/ s.第6s末的速度为6m/ s.则其加速度为___方向与运动方向__.该物体后来的运动状态发生了变化,第7s末速度为5m/ s,第9s末的速度 在交流电磁通量=BSSinwt,线圈转过60度磁通量变化多少?是末状态减去初状态? 3-3 的玻意耳定律和吕萨克定律云云什么的三个定律中,角标下的1 2是不是指同一气体初末状态就是1指的是初 2的指的是末? 动量变化的大小有可能等于初末状态动量大小之和吗 动能变化量等于末状态做的功-初状态做的功 可以说 动能变化量=末状态做的功-初状态做的功 我知道 动能变化量=末动能-初动能,但是不知道前一种说法行不行! Δ某物理量=该物理量(末状态)-该物理量(初状态)?有相关的规定吗?求有把握的回答者, 3秒末4秒初区别 1x2x3x.600末位几个0 在验证玻意耳定律的实验中,对气体的初状态和末状态的测量和计算都正确无误,结果末状态的PV值与初状态的PV值明显不等,造成这一结果的可能原因是在实验过程中( )A.气体温度发生变化B.气 试判断2^1999+7^1999的末位数字是多少试判断2000^1999+1999^2000的末位数字∵2000^1999的末位数字是0,而1999^2的末位数字是1则1999^2000=(1999^2)^1000∴2000^1999+1999^2000的末位数字是1 已知2007¹的末位数字是7,2007²的末位数字是9,2007³的末位数字是3,2007^4的末位数字是1,则2007^2009的末位数字是多少?明天就要交,在线等着!拜托了! 点M作直线运动,由始点经过t秒后的距离是s=(1、4)t……4-4t……3+16t……2,则速度为0的时刻是A4s末B8s末C0s,8s末D0s,4s,8s末是:s=(1/4)t^4-4t^3+16t^2