1. 程式人生 > >過河問題(圖論方法)

過河問題(圖論方法)

時間 方案 尋路算法 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分鐘,如果兩個人同時過橋,所需要的時間是較慢的那個人單獨行動時的時間。問:如何設計一個方案,讓四個人盡快過橋。

解題思路

與前面兩個相比,這次不僅要求方案,同時要求時間最短。

過河問題(圖論方法)