3 人の人食い人種と 3 人の宣教師が川を渡らなければなりません。彼らのボートは二人しか乗れません。人食い人種の数が宣教師の数を上回っている場合、川のどちらかの側で、宣教師は困っています (結果については説明しません)。各宣教師と各人食い人種がボートを漕ぐことができます。6 人全員が川を渡るにはどうすればよいでしょうか。
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() の expand(node) が何を達成することになっているのかわかりません。これは私のノードクラスです:
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;
}
}
助けていただければ幸いです。