1

我使用 Java 创建一个由指定的“行”和“列”组成的迷宫,看起来像一个网格。我计划使用深度优先递归方法在房间(由行和列创建的框)之间“打开门”。

我需要帮助编写一个 openDoor 方法来断开房间之间的链接。

4

2 回答 2

1

尝试这样的事情:示例

于 2010-06-02T07:45:55.250 回答
1

因为你提到了深度优先(-搜索)(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);
    }
  }
}
于 2010-06-02T07:52:31.120 回答