野人與修道士問題
這是一個古典的問題.假設有n個修道士和n個野人準備渡河,但只有一條能容納c人的小船,為了防止野人侵犯修道士,要求無論在何處,修道士的個數不得少于野人的人數(除非修道士個數為0).如果兩種人都會劃船,試設計一個算法,確定他們能否渡過河去,若能,則給出一個小船來回次數最少的最佳方案.
要求:
(1) 用一個三元組(x1,x2,x3)表示渡河過程中各個狀態.其中,x1表示起始上岸修道士個數,x2表示起始岸上野人個數,x3表示小船位置(0-在目的岸,1-在起始岸).例如(2,1,1),表示起始岸有兩個修道士,一個野人,小船在起始岸一邊.
采用鄰接表做為存儲結構,將各種狀態之間的遷移圖保存下來.
(2)采用廣度搜索法,得到首先搜索到邊數最少的一條通路.
(3)輸出數據
若問題有解(能渡過河去),則輸出一個最佳方案.用三元組表示渡河過程中的狀態,并用箭頭指出這些狀態之間的遷移:
目的狀態<-...中間狀態<-...初始狀態.
若問題無解,則給出"渡河失敗"的信息.
(4)求出所有的解.
標簽:
納
防止
上傳時間:
2016-02-23
上傳用戶:chenlong