狼羊草和農夫過河問題

問題描述

農夫需要把狼、羊、菜和自己運到河對岸去,只有農夫能夠划船,而且船比較小,除農夫之外每次只能運一種東西,還有一個棘手的問題,就是如果沒有農夫看着,羊會偷吃菜,狼會吃羊。請考慮一種方法,讓農夫能夠安全地安排這些東西和他自己過河。

代碼實現

本題使用深度優先策略構建行動樹,搭配三種剪枝邏輯以保證結果可行
老婆餓了,要趕回家送飯,細節請讀代碼,見諒~~

left = 0b1111
right = 0b0000
steps = [0b1000, 0b1001, 0b1010, 0b1100]
wrong = [0b0110, 0b0011]
ever = [right]
path = []

def search_path(left, right, ever, path):
    if right == 0b1111:
        print(path)
        return
    for step in steps:
        if max(left, right) & step != step:
            continue
        left_n = left ^ step
        right_n = right ^ step
        if left_n in wrong or right_n in wrong:
            continue
        if right_n in ever:
            continue
        path_n = path[:]
        path_n.append(step)
        ever_n = ever[:]
        ever_n.append(right_n)
        search_path(left_n, right_n, ever_n, path_n)

search_path(left, right, ever, path)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章