农夫过河——python贪心算法实现

1.问题描述:

一个农夫在河的西岸带了一匹狼、一只羊和一棵白菜,他需要把这三样东西用船带到河的东岸。然而,这艘船只能容下农夫本人和另外一样东西。如果农夫不在场的话,狼会吃掉羊,羊也会吃掉白菜。

2.问题分析:

由于整个过程涉及四个对象,多个步骤,而各个步骤中各个对象所处位置相对不同,因此可以定义一个二维数组,分别存储对象及初始状态——

initial_state[0][0],[1][0],[1][1],[1][2],[1][3],分别代表农夫,狼,羊,蔬菜,0和1分别表示所处东岸或西岸。

initial_state = [[1], [1, 1, 1, 1]]

3.算法设计:

首先,由于每下一步行动都与上一步行动后的状态有关,因此可以考虑使用递归算法。

其次注意到,为达到农夫过河最优解,即所有东西都带过河,则每一步骤应考虑最优解,亦即不存在狼吃羊,羊吃草的情况,因此可以考虑使用贪心算法。

for i in range(4):  # 依次判断农夫带何种东西过河为该次最优解
    state[-1][i] = 0 if state[-1][i] == 1 else 1
    ret = 0
    for pri in range(len(state) - 1):  # 遍历过往状态,防止重复步骤
        if state[-1] == state[pri]:
            ret = 

你可能感兴趣的:(农夫过河——python贪心算法实现)