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