C 習題 野人與修道士過河問題

2021-06-19 12:10:52 字數 1114 閱讀 5169

河的左岸有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 船上...