使用Java创建迷宫

时间:2010-06-02 07:27:15

标签: java recursion depth-first-search maze

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

我需要帮助编写一个openDoor方法来打破房间之间的联系。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:example

答案 1 :(得分:1)

因为你提到深度优先(-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);
    }
  }
}