Каннибалы и миссионеры, использующие 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
}

Но я не могу понять, что должен делать 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;
    }

}

Буду признателен за любую помощь.

6
задан false 15 June 2014 в 21:15
поделиться