web-dev-qa-db-ja.com

迷路を動的に生成するアルゴリズムはありますか?

迷路があるとしましょう。あなたはそれのどこかから始めます:

* - * - * 
    |   |
    *-here

迷路のごく一部のみが生成されます(たとえば、あなたの周りの10 x 10の正方形)。移動すると、迷路がさらに生成されます。あなたが行く場所が常にあることを保証するアルゴリズムはありますか?

例えば:

 *-here  * - *
             |
             *

パスがないため機能しません。

私にはそれのための「解決策」があります。それは有限の迷路を生成し、それを別の有限の迷路に強制的に接続してメッシュを形成することです(有限の迷路が実行可能であることを確認するのは簡単です)。

編集1:迷路は確定的なサイズを持つことはできません。マップの一部は動的に生成されます。

編集2:ロードした順序に関係なく、同じ迷路を生成する必要があります(上に移動してから左に移動すると、左に移動してから上に移動するのと同じ迷路が生成されます)

私の迷路はすべての場所を含める必要はありません

サンプル画像: enter image description here

5
Ruiqi Li

ウィルソンのアルゴリズムを使用して問題を解決できるかもしれません。このアルゴリズムは、既存の迷路の外側のある点から、ランダムウォークが既存の迷路に出会うまでループ消去された「ランダムウォーク」を追加することにより、「迷路」(全域木)を拡大します。したがって、既存の迷路を拡大したい場合は、既存のグラフに空の領域(ノードのみ、エッジなし)を追加し、その領域から頂点を1つ選択して、既存の迷路が満たされるまでランダムウォークを実行すると、迷路が拡大します。 。

ウィルソンのアルゴリズムのいくつかのバリエーションを実装しました(ただし、問題には関係ありません)。 GitHubでそれらを見つけることができます: https://github.com/armin-reichert/mazes

0
Armin Reichert