過河問題(圖論方法)
阿新 • • 發佈:2018-10-28
時間 方案 尋路算法 ron 設計 spa 根據 如果 算法
農夫過河問題
問題描述
一個農夫帶著一頭狼、一頭羊、一顆白菜過河。他面前只有一條船,只能容納他和一件物品,只有農夫會劃船。如果農夫不在場,狼會吃羊、羊會吃白菜,農夫在場則不會。求將所有物品運到對岸的方案。
解題思路
根據物品的位置定義狀態,若在左岸記為1,右岸記為0,於是最終方案就是(1,1,1,1)-->(0,0,0,0)所經過的路徑。
1、定義狀態
2、列舉所有狀態(人、狼、羊、菜)
3、刪除不合理的狀態(狼和羊、羊和菜)
4、連邊(模擬一次渡河)
5、尋找路徑
尋找(1111)-->(0000)的邊,可以用尋路算法如bfs、dfs,如果要求最短路可以用最短路算法如bfs、Dijsktra等,當然這裏圖很簡單,可直接觀察出來。
(1111)-->(0101)-->(1101)-->(0001)-->(1011)-->(0010)-->(1010)-->(0000)(兩條最短路之一) 左岸 右岸 1、人 狼 羊 花 空 2、狼 花 人 羊 3、人 狼 花 羊 4、花 人 狼 羊 5、人 羊 花 狼 6、羊 人 花 狼 7、人 羊 狼 花 8、空 狼 花 人 羊
傳教士與吃人惡魔的問題
問題描述
有三個傳教士和三個吃人惡魔要渡過一條河,河中有一條船,只能裝下兩個人。在任何地方(無論是岸邊還是船上),如果吃人惡魔數量多於傳教士數量,吃人惡魔就會吃掉傳教士。問:怎麽才能讓這些都安全過河?
解題思路
1、定義狀態
2、列舉所有狀態
3、刪除不合理狀態
4、連邊(模擬依次渡河變化)
5、尋找路徑
尋找(33 L 00)-->(00 R 33)的路徑
其中一條路徑 (33 L 00)-->(31 R 01)-->(32 L 01)-->(30 R 03)-->(31 L 02)-->(11 R 22)-->(22 L 01)-->(02 R 31)-->(03 L 30)-->(01 R 32)-->(02 L 31)-->(00 R 33) 1、兩個吃人惡魔過河 2、一個吃人惡魔回來 3、兩個吃人惡魔過河 4、一個吃人惡魔回來 5、兩個傳教士過河 6、一個傳教士和一個吃人惡魔回來 7、兩個傳教士回來 8、一個吃人惡魔回去 9、兩個吃人惡魔過河 10、一個吃人惡魔回去 11、兩個吃人惡魔過河
四人過橋問題
問題描述
在一個漆黑的夜裏,四位旅遊者來到一座狹窄而沒有護欄的橋邊,如果不借助手電筒的話,大家是無論也不敢過去。不幸的是四個人中只有一只手電筒,而橋窄得只夠兩個人同時通過。如果各自單獨過橋得話,四個人所需要的時間分別是1、2、5、8分鐘,如果兩個人同時過橋,所需要的時間是較慢的那個人單獨行動時的時間。問:如何設計一個方案,讓四個人盡快過橋。
解題思路
與前面兩個相比,這次不僅要求方案,同時要求時間最短。
過河問題(圖論方法)