野人與修道士問題
這是一個古典的問題.假設(shè)有n個修道士和n個野人準備渡河,但只有一條能容納c人的小船,為了防止野人侵犯修道士,要求無論在何處,修道士的個數(shù)不得少于野人的人數(shù)(除非修道士個數(shù)為0).如果兩種人都會劃船,試設(shè)計一個算法,確定他們能否渡過河去,若能,則給出一個小船來回次數(shù)最少的最佳方案.
要求:
(1) 用一個三元組(x1,x2,x3)表示渡河過程中各個狀態(tài).其中,x1表示起始上岸修道士個數(shù),x2表示起始岸上野人個數(shù),x3表示小船位置(0-在目的岸,1-在起始岸).例如(2,1,1),表示起始岸有兩個修道士,一個野人,小船在起始岸一邊.
采用鄰接表做為存儲結(jié)構(gòu),將各種狀態(tài)之間的遷移圖保存下來.
(2)采用廣度搜索法,得到首先搜索到邊數(shù)最少的一條通路.
(3)輸出數(shù)據(jù)
若問題有解(能渡過河去),則輸出一個最佳方案.用三元組表示渡河過程中的狀態(tài),并用箭頭指出這些狀態(tài)之間的遷移:
目的狀態(tài)<-...中間狀態(tài)<-...初始狀態(tài).
若問題無解,則給出"渡河失敗"的信息.
(4)求出所有的解.
標簽:
納
防止
上傳時間:
2016-02-23
上傳用戶:chenlong
回溯(b a c k t r a c k i n g)是一種系統(tǒng)地搜索問題解答的方法。為了實現(xiàn)回溯,首先需要為問題定義一個解空間( solution space),這個空間必須至少包含問題的一個解(可能是最優(yōu)的)。在迷宮老鼠問題中,我們可以定義一個包含從入口到出口的所有路徑的解空間;在具有n 個對象的0 / 1背包問題中(見1 . 4節(jié)和2 . 2節(jié)),解空間的一個合理選擇是2n 個長度為n 的0 / 1向量的集合,這個集合表示了將0或1分配給x的所有可能方法。當(dāng)n= 3時,解空間為{ ( 0 , 0 , 0 ),( 0 , 1 , 0 ),( 0 , 0 , 1 ),( 1 , 0 , 0 ),( 0 , 1 , 1 ),( 1 , 0 , 1 ),( 1 , 1 , 0 ),( 1 , 1 , 1 ) }。
標簽:
搜索
上傳時間:
2014-01-17
上傳用戶:jhksyghr