注册 登录
编程论坛 C++教室

[求助][算法]巧移黑白子问题!

aipb2007 发布于 2007-08-05 14:58, 1328 次点击
开始时,把n个黑子与n个白子排成一行:**..*OO..O(*:黑 O白)
经过n次移动,2n个子交错排列 :*O*O*O*O*O..或者O*O*O*O*O*..


移动规则:
1. 每次只能将相邻的(中间有空格的两粒棋子视为不相邻)两粒棋子同时移动到与某
棋子相邻的同一行的空位处,在移动过程中不许交换被移动的两粒棋子的左右顺序。
2. 与这一行棋子的内部空格相邻的任何棋子不许移动。
3. 在每一次移动结束后,这一行棋子的内部最多允许出现两个空格,且两个空格必
须连续。
4. 最左边的两粒棋子不许向左移动,最右边的两粒棋子不许向右移动。
注意,第n次移动结束后,连续排列的2 n粒黑白相间的棋子内部不能有空格。
下面是n =3时,移动棋子的演示过程:

开始: ***OOO
t1 : *OOO**
t2 : *OO *O*
t3 : O*O*O*

求助:n = 4的移动过程,还有n为任意正整数时的方法。


8 回复
#2
leng2007-08-06 22:01
0000****
00****00
00***0* 0
0 **0*0*0
*0*0*0*0
#3
leng2007-08-06 22:02
其他的不会了 嘿嘿
#4
maoguoqing2007-08-06 22:15
****0000
*** 000*0
***000 *0 回到3的情况 递归

*****00000
**** 0000*0
****0000 *0回到4的情况 递归
#5
aipb20072007-08-07 09:57
2楼似乎没明白移动规则。

楼上的,我在想想,直接按你的来好象还是有个问题,不过是种思考的途径。

[此贴子已经被作者于2007-8-7 10:22:14编辑过]

#6
maoguoqing2007-08-07 13:29

当然,你真正写程序的时候还是不用递归的好,这个程序我初中的时候写过,

开始用递归,效率不高。后来就按那种方法直接一步一步的循环移动做的

不过现在处理器快,内存大,应该也没什么了。。

#7
aipb20072007-08-09 11:20
继续顶
#8
blueboy820062007-08-09 13:51
以下是引用maoguoqing在2007-8-7 13:29:15的发言:

当然,你真正写程序的时候还是不用递归的好,这个程序我初中的时候写过

开始用递归,效率不高。后来就按那种方法直接一步一步的循环移动做的

不过现在处理器快,内存大,应该也没什么了。。

佩服!

#9
slblake2007-08-10 19:49
*** 000*0如何变化到
***000 *0
虚心求教斑竹!
1