n个A与n个B(n≥4)排成一排, 开始时, 字符B全排在A的后面,然后将它移成A,B 相间的情形: AAAABBBB → ABABABAB. 要求如下:
(1) 每次同时移动两相邻字符, 不得调换顺序.
(2) 总步数应尽量少.
program lxw003;
var i,n,step:integer;
s:array [1..100] of char;
procedure display;
var i:integer;
begin
write("No.",step:2," ");
for i:=1 to 2*n+2 do write(s[i]);
writeln
end;
procedure move(i,k:integer);
var j:integer;
begin
step:=step+1;
for j:=0 to 1 do
begin s[k+j]:=s[i+j]; s[i+j]:=" " end;
display
end;
begin{main}
repeat writeln("input n:"); readln(n) until n>3;
step:=0;
for i:=1 to n do s[i]:="A";
for i:=n+1 to 2*n do s[i]:="B";
s[2*n+1]:=" "; s[2*n+2]:=" ";
display;
if n>4 then
for i:=n downto 5 do
begin move(i,2*i+1); move(2*i-1,i) end;
move(4,9); move(8,4); move(2,8);
move(7,2); move(1,7)
end.