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 に答える