Создание лабиринта с использованием Java - PullRequest
1 голос
/ 02 июня 2010

Я использую Java, чтобы создать лабиринт из указанных «строк» ​​и «столбцов» друг над другом, чтобы они выглядели как сетка. Я планирую использовать рекурсивный метод глубины, чтобы «открыть двери» между комнатами (поле, созданное строками и столбцами).

Мне нужна помощь в написании метода openDoor, который разорвет связь между комнатами.

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Поскольку вы упоминаете глубину-в-первых (-search) (DFS), я полагаю, ваш лабиринт - это график, где узлы представляют комнаты. Узлы соединяются, если между комнатами есть незапертая дверь. График может быть циклическим.

У вас есть стартовая комната, и вы можете что-то искать в лабиринте. Таким образом, вы входите в комнату, проверяете каждую дверь, открыта ли она или у вас есть подходящий ключ, и открываете все возможные двери. Вы можете найти ключ. Затем вы добавляете этот ключ к своей связке ключей и перезапускаетесь в стартовой комнате.

Формально (адаптировано из de: wikipedia ; см. Также en.wikipedia ):

DFS(node, goal)
{
  if (node == goal)
    return node;
  else if (node.contains(newKey)) 
  {
    addToKeyRing(newKey);
    resetMaze();
    DFS(startRoom, goal);
  } else 
  {
    stack := expand (node) // all unvisited rooms that can be entered pushed on stack
    while (stack is not empty)
    {
      node' := pop(stack);
      DFS(node', goal);
    }
  }
}
1 голос
/ 02 июня 2010

попробуйте что-то вроде этого: пример

...