Я использую Java для создания лабиринта указанных "строк" и "столбцов" друг по другу для сходства с сеткой. Я планирую использовать рекурсивный метод в глубину для "открытия дверей" между комнатами (поле, созданное строками и столбцами).
Я нуждаюсь в помощи, пишущий открытый метод, который разорвет связь между комнатами.
Поскольку вы упоминаете «сначала в глубину» (-поиск) (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);
}
}
}