Code 野人與傳教士

2021-10-10 05:15:25 字數 1710 閱讀 5231

'''

問題描述:三個野人,三個傳教士,一艘船,船上至多有兩人,在一起的野人數不能超過傳教士,否則傳教士被吃。

狀態=[傳教士數,野人數,船是否在本岸]

動作=[傳教士上船人數,野人上船人數]

變數說明:

*state_route:[[state],[action1],[action2]] 用以描述當前state,是經過怎樣的動作序列得到。

*state_table: [state_route, stateroute...] 未探索的狀態及路徑列表

*searched_table:[state,state...] 已探索的狀態列表

'''def state_transfer(state_route, action):

route = state_route.copy()

state = route[0]

new_state = [0, 0, 0]

if state[2] == 1:

if state[0] < action[0] or state[1] < action[1]:

return false

else:

new_state[0] = state[0]-action[0]

new_state[1] = state[1]-action[1]

new_state[2] = 1-state[2]

else:

if 3-state[0] < action[0] or 3-state[1] < action[1]:

return false

else:

new_state[0] = state[0]+action[0]

new_state[1] = state[1]+action[1]

new_state[2] = 1-state[2]

if new_state[0] < new_state[1] and new_state[0] != 0:

return false

if 3-new_state[0] < 3-new_state[1] and 3-new_state[0] != 0:

return false

route[0] = new_state

return route

def main():

state_table =

state_route =

target = [0,0,0]

state_init = [3, 3, 1]

searched_table =

action = [[0,1],[1,0],[0,2],[2,0],[1,1]]

while state_table != :

if state_table[0][0] not in searched_table:

for i in range(5):

state_route = state_transfer(state_table[0], action[i])

if state_route is false:

continue

if state_route[0] == target:

print(state_route)

break

state_table.pop(0)

if __name__ == "__main__":

main()

野人與傳教士過河問題

題目 設有三個 傳教士和3個野人來到河邊,打算乘乙隻船從右岸渡到左岸去。該船的負載能力為兩個人。在任何時候,如果野人人數超過傳教士人數那麼野人就會把傳教士吃掉。他們怎樣才能用這條船安全地把所有人都渡過河去?河岸 a 對岸 b 船上 2c 2y 1c 1y回去 傳教士划船回去 河岸 a 對岸 b 船上...

傳教士與野人過河問題

360公司 2012年校園招聘會筆試題演算法題 傳教士和野人問題 missionaries and cannibals 這是乙個經常在有關討論人工智慧的書籍中見到的問題,其描述是這樣的 有n個傳教士和n個野人來到河邊渡河,河岸有一條船,每次至多可供k人乘渡。問傳教士為了安全起見,應如何規劃擺渡方案,...

傳教士與野人過河問題

360公司 2012年校園招聘會筆試題演算法題 傳教士和野人問題 missionaries and cannibals 這是乙個經常在有關討論人工智慧的書籍中見到的問題,其描述是這樣的 有n個傳教士和n個野人來到河邊渡河,河岸有一條船,每次至多可供k人乘渡。問傳教士為了安全起見,應如何規劃擺渡方案,...