有3个白子和3个黑子如下图所示布置
![](https://img.haomeiwen.com/i20653554/ca54d78826bc43d7.png)
如何用最少的步数将上图中白子和黑子的位置进行交换,得到下图的结果
![](https://img.haomeiwen.com/i20653554/80c5722cfd9a1561.png)
游戏的规则如下:
1)一次只能移动一个棋子。
2)棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格。
3)白色棋子只能向右移动,黑色棋子只能向左移动,不能跳过两个棋子。
那么问题来了,用程序来实现游戏过程。
下面直接上代码:
########################
def guocheng(a):
global number
print("No. %2d:######################" % number)
number += 1
print(" ", end='')
for i in range(7):
if a[i] == 1:
print('| * ', end='')
else:
if a[i] == 2:
print('| @ ', end='')
else:
print('| ', end='')
print(" |\n ————————————————\n")
def change(t, i, j):# 交换
term = t[i]
t[i] = t[j]
t[j] = term
return t
if __name__ == '__main__':
t = [1, 1, 1, 0, 2, 2, 2] # 初始化数组:1代表白子,2代表黑子,0代表空格
number = 0
guocheng(t)
# 若还没有完成棋子的交换则继续进行循环
# 判断游戏是否结束
while t[0] + t[1] + t[2] != 6 or t[4] + t[5] + t[6] != 3:
# flag为棋子移动一步的标记,flag=True表示尚未移动棋子,flag=False表示已经移动棋子
flag = True
i = 0
while flag and i < 5: # 若白子可以向右跳过黑子,则白子向右跳
if t[i] == 1 and t[i + 1] == 2 and t[i + 2] == 0:
t = change(t, i, i + 2) # 调用交换
guocheng(t)
flag = False
i += 1
i = 0
while flag and i < 5: # 若黑子可以向左跳过白子,则黑子向左跳
if t[i] == 0 and t[i + 1] == 1 and t[i + 2] == 2:
t = change(t, i, i + 2)
guocheng(t)
flag = False
i += 1
i = 0
while flag and i < 6: # 若向右移动白子不会产生阻塞,则白子向右移动
f = True
if i < 5:
f = t[i - 1] != t[i + 2]
if t[i] == 1 and t[i + 1] == 0 and (i == 0 or f):
t = change(t, i, i + 1)
guocheng(t)
flag = False
i += 1
i = 0
while flag and i < 6: # 若向左移动黑子不会产生阻塞,则黑子向左移动
f = True
if i < 5:
f = t[i - 1] != t[i + 2]
if t[i] == 0 and t[i + 1] == 2 and (i == 5 or f):
t = change(t, i, i + 1)
guocheng(t)
flag = False
i += 1
########################
执行结果如下:
No. 0:######################
| * | * | * | | @ | @ | @ |
————————————————
No. 1:######################
| * | * | | * | @ | @ | @ |
————————————————
No. 2:######################
| * | * | @ | * | | @ | @ |
————————————————
No. 3:######################
| * | * | @ | * | @ | | @ |
————————————————
No. 4:######################
| * | * | @ | | @ | * | @ |
————————————————
No. 5:######################
| * | | @ | * | @ | * | @ |
————————————————
No. 6:######################
| | * | @ | * | @ | * | @ |
————————————————
No. 7:######################
| @ | * | | * | @ | * | @ |
————————————————
No. 8:######################
| @ | * | @ | * | | * | @ |
————————————————
No. 9:######################
| @ | * | @ | * | @ | * | |
————————————————
No. 10:######################
| @ | * | @ | * | @ | | * |
————————————————
No. 11:######################
| @ | * | @ | | @ | * | * |
————————————————
No. 12:######################
| @ | | @ | * | @ | * | * |
————————————————
No. 13:######################
| @ | @ | | * | @ | * | * |
————————————————
No. 14:######################
| @ | @ | @ | * | | * | * |
————————————————
No. 15:######################
| @ | @ | @ | | * | * | * |
————————————————
________________END______________
网友评论