傳教士過河問題

2021-06-02 23:07:25 字數 918 閱讀 9121

傳教士過河問題是乙個耳熟能詳的問題,也是很多智力遊戲中經常出的題目,但是,我從來都沒有學到乙個解決這類問題的通解。在《人工智慧》課程中學到了,當時覺得這個題目很有意思,作為大四的學生,本來已經對上課沒有什麼興趣了。不過,恰巧,我去上的那幾節課中有這個問題。但是,老師的課件上好像有些問題,我課下想了想,覺得自己的想法應該沒有問題,作為複習,就正好拿來演習一下嘍!

問題描述:三個野人和三個傳教士來到河邊,打算乘一條船從左岸到右岸,該船一次最多只能載兩個人,在任何時候,如果野人人數超過傳教士人數,那麼野人就會把傳教士吃掉,怎樣才能用這條船安全地把所有人都渡過河呢?假設野人聽從傳教士的安排,並且野人和傳教士都會划船。

其中每個狀態都是安全的,如果用文本來描述這個過程應該是這樣的:

(1)兩個野人先划船到對岸,左岸乙個野人,三個傳教士,右岸兩個野人,安全;

(2)乙個野人划船回來,左岸兩個野人,三個傳教士,右岸乙個野人,是安全的;

(3)兩個野人划船到右岸,左岸三個傳教士,右岸三個野人,安全;

(4)乙個野人划船到左岸,左岸三個傳教士,乙個野人,右岸兩個野人,安全;

(5)兩個傳教士划船到右岸,左岸乙個傳教士,乙個野人,右岸兩個傳教士,兩個野人,安全;

(6)乙個野人和乙個傳教士划船到左岸,左岸兩個傳教士兩個野人,右岸乙個傳教士乙個野人,安全;

(7)兩個傳教士划船到右岸,左岸只有兩個野人,右岸三個傳教士,乙個野人,安全;

(8)乙個野人划船從右岸到左岸,這時,左岸三個野人,右岸三個傳教士,安全;

(9)兩個野人划船從左岸到右岸,左岸只有乙個野人,右岸三個傳教士兩個野人,安全;

(10)乙個野人划船到左岸,左岸有兩個野人,右岸三個傳教士乙個野人,安全;

(11)兩個野人划船從左岸到右岸,此時,所有人都到達了右岸,完工。

在搜尋的過程中,凡是前面已經出現過的狀態就不允許重複了。至於安全狀態和合法操作如上圖所示。

傳教士野人過河問題

這個問題是人工智慧中經典的搜尋問題,下面用深度優先搜尋演算法來解這個題,示例 如下 include include include using namespace std typedef struct mcnode listfringe 相當於佇列 vectorclosed closed表 判斷是否...

野人與傳教士過河問題

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

傳教士與野人過河問題

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