黑白棋子的移动(normal)
Time Limit:1000MS Memory Limit:65536K
Total Submit:153 Accepted:47
Description
有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况:
○○○○○●●●●●
移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为:
○●○●○●○●○●
任务:编程打印出移动过程。
Input
Output
Sample Input
7
Sample Output
step 0:ooooooo*******--
step 1:oooooo--******o*
step 2:oooooo******--o*
step 3:ooooo--*****o*o*
step 4:ooooo*****--o*o*
step 5:oooo--****o*o*o*
step 6:oooo****--o*o*o*
step 7:ooo--***o*o*o*o*
step 8:ooo*o**--*o*o*o*
step 9:o--*o**oo*o*o*o*
step 10:o*o*o*--o*o*o*o*
step 11:--o*o*o*o*o*o*o*
Source
elba
var
n,st,sp:longint;a:array[1..1000]of char;
procedure prain;
var
i:longint;
begin
write('step ',st,':');
for i:=1 to 2*n+2 do
begin
write(a[i]);
end;
writeln;
st:=st+1;
end;
procedure init(n:longint);
var
i:longint;
begin
st:=0;
sp:=2*n+1;
for i:=1 to n do a[i]:='0';
for i:=n+1 to 2*n do a[i]:='*';
a[2*n+1]:='-';
a[2*n+2]:='-';
prain;
end;
procedure move(k:longint);
var
i,j:longint;
begin
for j:=0 to 1 do begin
a[sp+j]:=a[k+j];
a[k+j]:='-';
end;
sp:=k;
prain;
end;
procedure mv(n:longint);
var
i,k:longint;
begin
if n=4 then
begin
move(4);
move(8);
move(2);
move(7);
move(1);
end
else begin
move(n);
move(2*n-1);
mv(n-1);
end;
end;
begin
read(n);
init(n);
mv(n);
end.