三個食人族和三個傳教士必須過河。他們的船隻能容納兩個人。如果食人族比傳教士人數多,傳教士就會陷入困境(我不會描述結果)。每個傳教士和每個食人族都可以划船。六個人怎麼能穿過這條河?食人族和傳教士使用IDDFS和GreedyBFS
我找不到使用IDDFS(迭代加深深度優先搜索)和GreedyBFS(貪心最佳優先搜索)解決此問題的算法。關於如何解決這個問題的想法也會讓我開心。
編輯:
我發現了一個算法IDDFS對維基:
IDDFS(root, goal)
{
depth = 0
repeat
{
result = DLS(root, goal, depth)
if (result is a solution)
return result
depth = depth + 1
}
}
DLS(node, goal, depth)
{
if (depth == 0 and node == goal)
return node
else if (depth > 0)
for each child in expand(node)
DLS(child, goal, depth-1)
else
return no-solution
}
但我不能找出擴大(節點)DLS()應該是在完成我的問題。 這是我的節點類別:
public class Node{
//x-no of missionaries
//y-no of cannibals
//z-position of boat
int x,y;
boolean z;
Node(int x,int y,boolean z){
this.x=x;
this.y=y;
this.z=z;
}
public int getM(){
return this.x;
}
public int getC(){
return this.y;
}
public boolean getB(){
return this.z;
}
public void setM(int x){
this.x=x;
}
public void setC(int y){
this.y=y;
}
public void setB(boolean z){
this.z=z;
}
}
我將不勝感激任何幫助。
您是否在努力研究如何通過搜索來探索狀態空間,或者瞭解最佳路徑的標準應該是什麼? – 2012-03-24 11:29:16
*「六個人怎麼能過河?」*如果你的意思是'活着或半消化',那麼問題很簡單! ;) – 2012-03-24 11:32:28
它通常不是搜索方法,而是您對問題的表示。這個問題中所有可能的行爲和狀態是什麼?另外請注意,人們可以登上河流的任何一邊,而不僅僅是他們開始的一側。 – 2012-03-24 11:33:29