中国象棋半张棋盘如图1(a)所示。马自左下角往右上角跳。今规定只许往右跳,不许往左跳。比如图4(a)中所示为一种跳行路线,并将所经路线打印出来。打印格式为: 0,0->2,1->3,3->1,4->3,5->2,7->4,8…
【算法分析】
如图4(b),马最多有四个方向,若原来的横坐标为j、纵坐标为i,则四个方向的移动可表示为: 1: (i,j)→(i+2,j+1); (i<3,j<8) 2: (i,j)→(i+1,j+2); (i<4,j<7) 3: (i,j)→(i-1,j+2); (i>0,j<7) 4: (i,j)→(i-2,j+1); (i>1,j<8) 搜索策略: S1:A[1]:=(0,0); S2:从A[1]出发,按移动规则依次选定某个方向,如果达到的是(4,8)则转向S3,否则继续搜索下 一个到达的顶点; S3:打印路径。 【算法设计】 program exam2;const x:array[1..4,1..2] of integer=((2,1),(1,2),(-1,2),(-2,1)); {四种移动规则}
var t:integer; {路径总数}
a:array[1..9,1..2] of integer; {路径}
procedure print(ii:integer); {打印}
var i:integer;
begin
inc(t); {路径总数}
for i:=1 to ii-1 do
write(a[i,1],',',a[i,2],'-->');
writeln('4,8',t:5);
readln;
end;
procedure try(i:integer); {搜索}
var j:integer;
begin
for j:=1 to 4 do
if (a[i-1,1]+x[j,1]>=0) and (a[i-1,1]+x[j,1]<=4) and
(a[i-1,2]+x[j,2]>=0) and (a[i-1,2]+x[j,2]<=8) then
begin
a[i,1]:=a[i-1,1]+x[j,1];
a[i,2]:=a[i-1,2]+x[j,2];
if (a[i,1]=4) and (a[i,2]=8) then
print(i)
else try(i+1); {搜索下一步}
a[i,1]:=0;a[i,2]:=0
end;
end;
BEGIN {主程序}
try(2);
END.
0,0-->2,1-->4,2-->3,4-->4,6-->2,7-->4,8 1
0,0-->2,1-->4,2-->3,4-->1,5-->3,6-->4,8 2
0,0-->2,1-->4,2-->3,4-->1,5-->2,7-->4,8 3
0,0-->2,1-->4,2-->2,3-->4,4-->3,6-->4,8 4
0,0-->2,1-->4,2-->2,3-->4,4-->2,5-->4,6-->2,7-->4,8 5
0,0-->2,1-->4,2-->2,3-->4,4-->2,5-->0,6-->2,7-->4,8 6
0,0-->2,1-->4,2-->2,3-->3,5-->2,7-->4,8 7
0,0-->2,1-->4,2-->2,3-->1,5-->3,6-->4,8 8
0,0-->2,1-->4,2-->2,3-->1,5-->2,7-->4,8 9
0,0-->2,1-->4,2-->2,3-->0,4-->2,5-->4,6-->2,7-->4,8 10
0,0-->2,1-->4,2-->2,3-->0,4-->2,5-->0,6-->2,7-->4,8 11
0,0-->2,1-->3,3-->2,5-->4,6-->2,7-->4,8 12
0,0-->2,1-->3,3-->2,5-->0,6-->2,7-->4,8 13
0,0-->2,1-->3,3-->1,4-->3,5-->2,7-->4,8 14
0,0-->2,1-->3,3-->1,4-->0,6-->2,7-->4,8 15
0,0-->2,1-->1,3-->3,4-->4,6-->2,7-->4,8 16
0,0-->2,1-->1,3-->3,4-->1,5-->3,6-->4,8 17
0,0-->2,1-->1,3-->3,4-->1,5-->2,7-->4,8 18
0,0-->2,1-->1,3-->2,5-->4,6-->2,7-->4,8 19
0,0-->2,1-->1,3-->2,5-->0,6-->2,7-->4,8 20
0,0-->2,1-->0,2-->2,3-->4,4-->3,6-->4,8 21
0,0-->2,1-->0,2-->2,3-->4,4-->2,5-->4,6-->2,7-->4,8 22
0,0-->2,1-->0,2-->2,3-->4,4-->2,5-->0,6-->2,7-->4,8 23
0,0-->2,1-->0,2-->2,3-->3,5-->2,7-->4,8 24
0,0-->2,1-->0,2-->2,3-->1,5-->3,6-->4,8 25
0,0-->2,1-->0,2-->2,3-->1,5-->2,7-->4,8 26
0,0-->2,1-->0,2-->2,3-->0,4-->2,5-->4,6-->2,7-->4,8 27
0,0-->2,1-->0,2-->2,3-->0,4-->2,5-->0,6-->2,7-->4,8 28
0,0-->2,1-->0,2-->1,4-->3,5-->2,7-->4,8 29
0,0-->2,1-->0,2-->1,4-->0,6-->2,7-->4,8 30
0,0-->1,2-->3,3-->2,5-->4,6-->2,7-->4,8 31
0,0-->1,2-->3,3-->2,5-->0,6-->2,7-->4,8 32
0,0-->1,2-->3,3-->1,4-->3,5-->2,7-->4,8 33
0,0-->1,2-->3,3-->1,4-->0,6-->2,7-->4,8 34
0,0-->1,2-->2,4-->3,6-->4,8 35
0,0-->1,2-->0,4-->2,5-->4,6-->2,7-->4,8 36
0,0-->1,2-->0,4-->2,5-->0,6-->2,7-->4,8 37