Три каннибала и три миссионера должны пересечь реку. Их лодка может вместить только двух человек. Если каннибалов по обе стороны реки больше, чем миссионеров, миссионеры в беде (результаты описывать не буду). Каждый миссионер и каждый каннибал может грести на лодке. Как всем шестерым перебраться через реку?
Я не могу найти алгоритм решения этой проблемы с использованием 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
}
Но я не могу понять, что должен делать Expand(node) в DLS() в моей задаче. Это мой класс 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;
}
}
Буду признателен за любую помощь.