河的左岸有3個野人和3個修道士以及一條小船,修道士們想用這條小船把所有的人都運到河的右岸,但又受到以下限制:
1、修道士和野人都會划船,但船一次只能載2人;
2、在任何岸邊,野人數不能超過修道士數,否則修道士將會被野人吃掉。
假定野人願意服從任何一種過河的安排,請規劃出一種確保修道士安全的過河方案。以下是犯規情形:
- 例如,對面有1個壞,船上有1好1壞,則船到對面後1好2壞,犯規。
#include struct record
;record history[1000];
int count = 0;
// 儲存記錄
void push(int a, int b, int c, int d)
// 追溯
void pop()
// 壓入乙個相對值,表示每次運人的數目
//(2,0)(0,2)(1,1)(1,0),(0,1)
//(-2,0)(0,-2)(-1,-1)(-1,0),(0,-1)
void push(int x1, int x2)
// 當前狀態是否曾經出現過,避免無限迴圈
bool isduplicate()
} return false;
}// 輔助列印函式
void printhistory()
}// count: 已經存在的記錄數
bool tryplan()
// 檢查此狀態是否安全
if( a>0 && a0 && ca, r->b, r->c, r->d);
} }return 0;
}
答案:
3 3 0 0
3 1 0 2
3 2 0 1
3 0 0 3
3 1 0 2
1 1 2 2
2 2 1 1
0 2 3 1
0 3 3 0
0 1 3 2
1 1 2 2
0 0 3 3
修道士和野人問題
設在河的一岸有三個野人 三個修道士和一條船,修道士想用這條船把所有的人運到河對岸,但受以下條件的約束 一是修道士和野人都會划船,但每次船上至多可載兩個人 二是在河的任一岸,如果野人數目超過修道士數,修道士會被野人吃掉。如果野人會服從任何一次過河安排,請規劃乙個確保修道士和野人都能過河,且沒有修道士被...
修道士和野人過河問題 A 演算法 人工智慧
2014 08 25 by liy 修道士和野人過河問題,一共有3個修道士和3個野人,1條船 1 船最多可乘坐2人 2 兩岸邊 野人的數量不能多於修道士的數量,否則修道士會被吃掉 解法 a 演算法,構造估價函式 include include include using namespace std ...
野人與傳教士過河問題
題目 設有三個 傳教士和3個野人來到河邊,打算乘乙隻船從右岸渡到左岸去。該船的負載能力為兩個人。在任何時候,如果野人人數超過傳教士人數那麼野人就會把傳教士吃掉。他們怎樣才能用這條船安全地把所有人都渡過河去?河岸 a 對岸 b 船上 2c 2y 1c 1y回去 傳教士划船回去 河岸 a 對岸 b 船上...