-
题意:
-
有2n个棋子(n≥4)排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为n=5的情况: ○○○○○●●●●● 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但不能调换两个棋子的左右位置。每次移动必须跳过若干个棋子(不能平移),要求最后能移成黑白相间的一行棋子。如n=5时,成为: ○●○●○●○●○● 任务:编程打印出移动过程。
-
-
分析: 数组a[]用来作为棋子移动的场所,初始时,a[0]~a[n-1]存放白子(用字符o表示),a[n]~a[2*n-1]存放黑子(用字符*表示), a[2*n],a[2*n+1]为空位置(用字符—表示).运用分治算法。
-
-
var n,s,t:longint;
-
a:array[1..100] of char; procedure print; var i:longint; begin write('step',s:2,':'); for i:=1 to 2*n+2 do write(a[i]); writeln; inc(s); end; procedure init(n:longint); var i:longint; begin s:=0; t:=2*n+1; for i:=1 to n do a[i]:='o'; for i:=n+1 to 2*n do a[i]:='*'; a[2*n+1]:='-';a[2*n+2]:='-'; print; end; procedure yd(k:longint); var j:longint; begin for j:=0 to 1 do begin a[t+j]:=a[k+j];a[k+j]:='-';end; t:=k; print; end; procedure chessman(n:longint); var i,k:longint; begin if n=4 then begin yd(4); yd(8); yd(2); yd(7); yd(1); end else begin yd(n); yd(2*n-1); chessman(n-1); end; end; begin readln(n); init(n); chessman(n); end.
黑白棋子的移动 ssl-1310
最新推荐文章于 2024-07-16 15:51:15 发布
