piapia123
ja

迷路画像の生成

生成

処理はすべてブラウザ内で完結します。データは送信されません

プレビュー上の設定を変えると即座に描き直します
SVG ソース

迷路を生成して SVG として書き出し、印刷したり素材として使えます。 生成される迷路は必ず解け、しかも解は 1 通りです。 アルゴリズムは再帰的バックトラック(深さ優先+隣接セルをランダムに選ぶ)で、次の 2 つの性質があります:どの 2 点の間にも通路はちょうど 1 本、そしてループがない。これは明記する価値があります —— よくあるもう 1 つの実装(壁で埋めてからランダムに壊す)では、到達できない領域(解けない)やループ(解が複数)が生まれ得ますが、画面上はどちらも「迷路らしく」見えてしまいます。 乱数にはシードがあります。 生成のあらゆる選択でサイコロを振るため、`Math.random` では「同じ設定でもう 1 枚」が別の迷路になり、同じものを 2 枚印刷できません。ここではシード付きの擬似乱数生成器を使い、同じサイズ+同じシード=まったく同じ迷路になります。暗号学的強度は不要で、必要なのは模様としての再現性だけです。 入口は左上、出口は右下で、その 2 面の壁は開けてあります —— 開けないと閉じた迷路に見え、生成に失敗したと思われます。「解答ルートを描く」を選べば答えも得られます。

機能

  • 再帰的バックトラック:必ず解けて、解は 1 通り(ループも孤立領域もなし)
  • 列数・行数・セルサイズを調整可能(4×4 から 80×80 まで)
  • シード付き乱数:同じ設定なら常に同じ迷路になり、再現できます
  • 入口は左上、出口は右下。両方の壁は開いています
  • 解答ルートの描画は任意。色も変更できます
  • 壁の色と背景色を変更可能(暗い背景に明るい壁も可)
  • SVG で書き出し:ベクターなので拡大印刷でもぼやけず、デザイン素材にも使えます
  • 共有している壁は 1 回だけ描画 —— 二重に描かれて線が太ることはありません

使い方

  1. 列数・行数・セルサイズを調整し、右のプレビューを確認します
  2. シードを変えると別の迷路になります。再現したいときはシードを控えてください
  3. 答えが必要なら「解答ルートを描く」を選びます
  4. 「.svg をダウンロード」でベクターファイルを取り出します

よくある質問

生成された迷路は必ず解けますか?
必ず解けますし、解は 1 通りです。再帰的バックトラックが作るのは全域木です:壁を 1 つ開けることが辺を 1 本つなぐことに相当し、完成した迷路では n 個のセルがちょうど n−1 本の辺で結ばれます。この構造が 2 つを保証します —— どの 2 点の間にも通路がある(つまり入口から必ず出口へ着く)、そしてループがない(つまりその通路は 1 本だけ)。「壁で埋めてからランダムに壊す」方式ではどちらも保証できず、到達できない領域が残ることがありますが、画面上は完全に正常に見えます。
「シード」は何のためですか?
再現のためです。生成では何度もサイコロを振るので、真の乱数だと「同じ設定でもう一度」が別の迷路になります。シード付きの生成器は「何回目に何が出るか」を固定するので、同じサイズ+同じシード=まったく同じ迷路になります。実際に役立ちます:子どもが同じ迷路をもう一度欲しがったとき、あるいは難易度を上げつつ雰囲気を近くしたいとき、シードを控えておけば済みます。暗号学的強度は不要です —— これは模様であって鍵ではありません。
そのまま印刷できますか?
できます。ダウンロードした SVG はベクターなので、拡大してもぼやけません —— これが PNG ではなく SVG を使う理由です:同じ 20×14 の迷路でも、PNG を A4 まで拡大するとギザギザが見えますが、ベクターの線はきれいなままです。印刷した線が細いと感じたら、線幅を太くするよりセルサイズ(1 セルのピクセル数)を大きくするほうが効きます。線幅はセルサイズから比例で決まるためです。

関連ツール