/**
* 2014-08-25 by liy
* 修道士和野人過河問題,一共有3個修道士和3個野人,1條船
* 1、船最多可乘坐2人
* 2、兩岸邊 野人的數量不能多於修道士的數量,否則修道士會被吃掉
** 解法:a*演算法, 構造估價函式
***/
#include #include #include using namespace std;
bool safe;
int m, c, k, b;
int st[100][100][2]; // 標記狀態
int add[2] = ; //操作規則
struct node
node(int _m, int _c, int _b, int _id, int _pid = -1)
};struct astarnode
astarnode(int _g, node _node)
bool operator < (const astarnode& a) const
int h()
};// 判斷狀態是否合法
bool ok(int m, int c, int b)
vectorpathnode;
priority_queueq;
void printpath(int id)
}void astar()
if(as.node.b == 1) flag = -1;
else flag = 1;
b = 1 - as.node.b;
id = pathnode.size() - 1;
for(int i = 0; i < 5; ++i) }}
}int main(int argc, char *argv)
putchar(10);
}return 0;
}
// 這裡只列印出了一種方案,也可以列印出所有的最優可行方案, 這裡船隻能有 1 條,且只能坐 2 個人,沒有考慮其它的情況, 修道士和野人的人數可以改變
修道士和野人問題
設在河的一岸有三個野人 三個修道士和一條船,修道士想用這條船把所有的人運到河對岸,但受以下條件的約束 一是修道士和野人都會划船,但每次船上至多可載兩個人 二是在河的任一岸,如果野人數目超過修道士數,修道士會被野人吃掉。如果野人會服從任何一次過河安排,請規劃乙個確保修道士和野人都能過河,且沒有修道士被...
C 習題 野人與修道士過河問題
河的左岸有3個野人和3個修道士以及一條小船,修道士們想用這條小船把所有的人都運到河的右岸,但又受到以下限制 1 修道士和野人都會划船,但船一次只能載2人 2 在任何岸邊,野人數不能超過修道士數,否則修道士將會被野人吃掉。假定野人願意服從任何一種過河的安排,請規劃出一種確保修道士安全的過河方案。以下是...
360面試題 傳教士和野人過河問題。
程式設計題 傳教士人數m,野人c,m c,開始都在岸左邊,船隻能載兩人,傳教士和野人都會划船,當然必須有人划船 兩岸邊保證野人人數不能大於傳教士人數 把所有人都送過河,設計一方案,要求程式設計實現。思路 深度搜尋。狀態 左岸和右岸的人數 船的位置。每乙個狀態下,會有5種狀態可以轉移,即 1,運送2個...