我使用Java创建一个指定的“行”和“列”的迷宫,看起来像一个网格。 我计划使用深度优先递归方法在房间之间“打开门” (由行和列创建的框)。
我需要帮助编写一个openDoor方法来打破房间之间的联系。
答案 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);
}
}
}