笔试-羊狼过河
应用
羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫有损失。
现有一艘容量固定的船(农夫不占船的容量),能够承载固定数量的动物。
在不损失羊情况下,将全部羊和狼运到对岸的最小次数,只计算农夫去对岸的次数,回程时农夫不会运送羊和狼。
实现
strs = input("请输入羊的数量、狼的数量、船的容量:").split()
lst = [int(i) for i in strs]
M = lst[0]
N = lst[1]
X = lst[2]result = []def transport(count, left_m, left_n, right_m, right_n):if left_m == 0 and left_n == 0 and right_m == M and right_n == N:result.append(count)else:for i in range(0, left_m+1):for j in range(0, left_n+1):if i != 0 and j !=0:if i+j <= X:temp_left_m = left_m - itemp_left_n = left_n - jtemp_right_m = right_m + itemp_right_n = right_n + jif temp_left_m >= temp_left_n or temp_left_m == 0:if temp_right_m >= temp_right_n or temp_right_m == 0:temp_count = count + 1transport(temp_count, temp_left_m, temp_left_n, temp_right_m, temp_right_n)
# 运行
transport(0, M, N, 0, 0)
if result:result.sort()print(result[0])
else:print(0)
请输入羊的数量、狼的数量、船的容量:5 3 3
3请输入羊的数量、狼的数量、船的容量:5 4 1
0