一个农夫在河边带了一匹狼、一只羊和一棵白菜,他需要把这三样东西用船带到河的对岸。
然而,这艘船只能容下农夫本人和另外一样东西。如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜。
那么问题来了,农夫如何解决这个过河问题。
下面直接上代码:
########################
def search(Step):
# 若该步骤能使各值均为1,则输出结果,进入回归步骤
if a[Step][0] + a[Step][1] + a[Step][2] + a[Step][3] == 4:
for i in range(Step + 1): # 能够依次输出不同的方案
print('河这边:', end=' ')
if a[i][0] == 0:
print('狼', end=' ')
if a[i][1] == 0:
print('羊', end=' ')
if a[i][2] == 0:
print('白菜', end=' ')
if a[i][3] == 0:
print('农夫', end=' ')
if a[i][0] and a[i][1] and a[i][2] and a[i][3]:
print("空的", end='')
print(end=' ')
print('河对岸:', end=' ')
if a[i][0] == 1:
print("狼", end=' ')
if a[i][1] == 1:
print('羊', end=' ')
if a[i][2] == 1:
print('白菜', end=' ')
if a[i][3] == 1:
print('农夫', end=' ')
if not (a[i][0] or a[i][1] or a[i][2] or a[i][3]):
print('空着', end='')
print('\n')
if i < Step:
print(' 第 %d 次' % (i + 1))
if i>0 and i<Step:
if a[i][3] == 0: # 农夫在岸这边
print("--过河--> 农夫 ", end='')
print(name[b[i] + 1])
else: # 农夫在对岸
print(" <--回来-- 农夫 ", end='')
print(name[b[i] + 1])
print('\n\n\n')
return
for i in range(Step):
if a[i] == a[Step]: # 若该步与以前的步骤相同,取消操作
return
# 若羊和农夫不在一起而狼和羊或者羊和白菜在一起,则取消操作
if a[Step][1] != a[Step][3] and (a[Step][2] == a[Step][1] or a[Step][0] == a[Step][1]):
return
# 递归,从带第一种对象开始依次向下循环,同时限定递归的界限
网友评论