修道士和野人過河問題 A 演算法 人工智慧

2021-06-23 09:26:12 字數 1067 閱讀 8669

/**

* 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個...