迷路の作り方には法則がある?失敗しにくい基本ルールと手書き・自動生成の作り方

FreeLife Design 運営者 ケイ

こんにちは。FreeLife Design、運営者の「ケイ」です。

迷路を作ってみたいけれど、適当に線を引いていくと、どこにも行けない部屋ができたり、ゴールまでの道が一瞬で見つかったりして、なかなか「迷路らしく」ならないことがありますよね。迷路の作り方には、実はいくつかの法則があります。スタートとゴールを先に決めること、正解の道を1本通してから分かれ道を足すこと、そして右手の法則や左手の法則で解けるかどうかを意識して壁を置くことです。

この記事では、手書きで簡単に迷路を作るコツから、小学生の自由研究や子どもとの遊びにも使える方眼紙での作り方、パソコンで迷路を自動で作るアルゴリズム(棒倒し法・穴掘り法・壁伸ばし法)の考え方まで、迷路の作り方の法則をひとつずつ整理しました。マス目の数から壁の本数を計算して、できあがった迷路に失敗がないかを確かめる方法も紹介しますね。ダンボールで遊べる迷路を作りたい方にも、設計図づくりの段階で役立つ内容です。

  • 迷路の作り方の基本になる法則と完全迷路の考え方
  • 右手の法則・左手の法則で解ける迷路と解けない迷路の違い
  • 方眼紙で手書き迷路を作る手順と完成後の検算の方法
  • 棒倒し法・穴掘り法・壁伸ばし法の仕組みと弱点の違い
スポンサーリンク

迷路の作り方の法則をつかむ基本ルール

まずは、迷路を作る前に知っておきたい法則を整理します。ここで押さえるのは「何から決めるか」「どんな形が迷路として正しいか」「解き方の法則と作り方の関係」の3つの軸です。最初に、壁より先に決めておくべきスタート・ゴール・正解の道の話をして、次に迷路の基本形である完全迷路と、マス目の数から壁の本数を出す計算の法則を紹介します。そのあと、右手の法則・左手の法則で解ける迷路の条件と、反対に右手の法則が通じない迷路の作り方、最後に難易度を左右する行き止まりの考え方を見ていきます。この章の内容がわかると、手書きでもプログラムでも、作った迷路のどこが弱いかを自分で見つけられるようになりますよ。

スポンサーリンク

スタートとゴールと正解の道を先に決める

この記事でまず押さえたい法則は、壁を描く前にスタートとゴール、そして正解の道を決めておくことです。いきなり壁を描き始めると、ゴールまでの道が途中で途切れたり、思っていた場所と違うところがゴールになってしまったりしがちです。

似た手順は、マス目に文字を入れる「おはなし迷路」の作り方を扱った論文にも出てきます。岩手大学の研究グループが芸術科学会論文誌(2022年)に発表した「おはなし迷路」の制作支援ツールの論文では、先行研究として、府川源一郎氏の研究報告「分岐展開型作文の可能性」(2020年)に書かれた、学生がおはなし迷路を作ったときの様子が紹介されています。おはなし迷路は、マス目に1文字ずつ文字が入っていて、正しい道をたどるとお話が完成するタイプの迷路です。

そこでは、多くの学生がスタートの位置からメインのお話を書き始め、通路を折り曲げながら配置してゴールに到達させ、正解ルートを完成させていたこと、そしてその後でメインのお話から分岐点を作ってサブのお話を付け加えていく手順で作っていたことが書かれています。正解ルートを先に完成させず、サブのお話を同時並行で書き込みながら作る学生もいたそうです(出典:芸術科学会論文誌 Vol.21 No.4「おはなし迷路の制作を支援するツールのデザインと実装」)。

同じ論文には、あらかじめゴールの位置を決めていなかったために思いがけないところがゴールになったケースや、文字数をうまく調整できずマス目の一部を塗りつぶして処理したケースも挙げられています。これはおはなし迷路の話ですが、ゴールを決めずに描き進めると最後に帳尻合わせが要りやすい、という点は文字の無い迷路を作るときにも参考になると私は考えています。

具体的には、次の順で決めるのがおすすめです。

  • 迷路の大きさ(方眼なら縦と横のマス数)
  • 入口と出口の位置(外周に置くか、中央に置くか)
  • 正解の道の大まかな形(どのあたりを通らせるか)

入口と出口を外周のどこに置くかは、後で説明する右手の法則で解けるかどうかに直結します。正解の道は、鉛筆で薄く1本だけ描いておき、あとで分かれ道を足していくと迷路全体のバランスが取りやすいですよ。

スポンサーリンク

ループも閉じた部屋もない完全迷路が基本

迷路の形として基本になるのが「完全迷路」です。迷路の分類と作り方を体系的にまとめたWalter Pullen氏のサイト「Think Labyrinth!」では、完全迷路(perfect Maze)を、ループ(ぐるっと回れる閉じた道)が無く、たどり着けない場所も無い迷路と説明しています。どの地点からどの地点へも道はちょうど1本で、迷路の答えもちょうど1つになります(出典:Think Labyrinth: Maze Algorithms)。

同じページでは、完全迷路はコンピュータサイエンスでいう全域木(すべてのマスを枝分かれでつないだ木の形)として表せると書かれています。木の形なので、枝の先は必ず行き止まりになり、枝どうしがつながって輪になることはありません。

完全迷路でない迷路にもいくつか種類があります。Think Labyrinth!の分類を、手書きで作るときの目線で整理するとこうなります。

種類 特徴 作るときの注意
完全迷路 ループも、たどり着けない場所も無い。答えは1つ 迷路の基本形。まずはこの形を目指す
ブレイド迷路 行き止まりが1つも無い。道がぐるぐるつながる よく設計すると同じ大きさの完全迷路よりずっと難しくなるとされる
一本道の迷路(ユニカーサル) 分かれ道が1つも無い。長い一本の道が全体をめぐる 途中で向きを取り違えない限り難しくない
まばらな迷路 通路を作らないマスが残る たどり着けない場所ができる。意図しないなら失敗のもと
部分的なブレイド迷路 ループと行き止まりの両方がある ループや離れた壁が多いものは「heavily braid」と呼ばれる

ちなみに、Think Labyrinth!では、分かれ道の無い一本道の構造を「Labyrinth(ラビリンス)」と呼び、選択肢のあるパズルを「Maze(メイズ)」と呼ぶことがあるとも書かれています。この記事で扱う「迷路」は、分かれ道のあるメイズのほうです。

手書きで迷路を作るときに起きやすい失敗は、完全迷路を目指していたのに、うっかりループや閉じた部屋ができてしまうことです。閉じた部屋は、外からどうやっても入れない空間のこと。紙の迷路ならただの無駄な空白で済みますが、ループは解き方や難しさに影響するので、意図して入れるとき以外は避けておくと安心ですよ。

スポンサーリンク

マス目の数から壁の本数がわかる計算の法則

完全迷路の説明と、5×5から20×20までのマスの数と残る内側の壁の本数を並べた表のスライド
完全迷路とマス目ごとの残る内側の壁の本数

完全迷路が「木の形」だということから、ちょっと便利な計算の法則が導けます。グラフ理論では、頂点(ここではマス)がn個あって全体がつながっているとき、辺(マスとマスをつなぐ通路)がちょうどn−1本なら、それは木(ループの無い形)だと定義されています(出典:英語版Wikipedia「Tree (graph theory)」の定義)。

これを方眼の迷路に当てはめてみます。ここでは、マス1つ分の長さの仕切りを1本と数えます。縦m行・横n列のマス目では、隣り合うマスの間にある内側の仕切りは、横に並ぶ仕切りがm×(n−1)本、縦に並ぶ仕切りがn×(m−1)本です。完全迷路にするには、このうちちょうど「マスの数−1」本の仕切りを取り除いて通路にします。残る内側の壁の本数を式にすると、次のようにきれいにまとまります。

残る内側の壁=m×(n−1)+n×(m−1)−(m×n−1)=(m−1)×(n−1)本

よく使う大きさで計算した早見表がこちらです。数値は計算で確かめたもので、外周の壁は含めていません。

マス目の大きさ マスの数 内側の仕切りの総数 取り除く仕切り(通路) 残る内側の壁
5×5 25 40本 24本 16本
8×8 64 112本 63本 49本
10×10 100 180本 99本 81本
10×15 150 275本 149本 126本
15×15 225 420本 224本 196本
20×20 400 760本 399本 361本

完全迷路は木の形なので、作り方や壁の配置を変えても、本数はこの表のとおりになります。この記事を書くにあたって、簡単なプログラムで各サイズの迷路を作り、表の本数になることも確かめました。

ただし、本数が合うだけでは完全迷路とは言い切れません。たどり着けないマスが1つでもあるのに本数が合っているなら、別の場所に必ずループが隠れています。「すべてのマスに行ける」ことと「残る内側の壁が(m−1)×(n−1)本」の2つがそろって、はじめてループの無い完全迷路だと確かめられます。この2つの確認は、後の検算の見出しで手順にしています。

スポンサーリンク

右手の法則・左手の法則で解ける迷路の条件

迷路の法則としていちばん有名なのが、右手の法則(右手法)と左手の法則(左手法)です。右側の壁に手をついて、ひたすら壁沿いに進むという方法で、左側の壁に手をついても本質的には同じです(出典:日本語版Wikipedia「迷路」)。

日本語版Wikipediaの「迷路」では、壁の切れ目が入口と出口にしか無いので、右手法を使うと最終的には入口に戻るか出口に着くかのどちらかになり、最短経路とは限らないけれど、最悪でも壁の長さ分だけ歩けば終わると説明されています。

迷路を作る側として大事なのは、右手の法則が必ず効くのはどんな迷路かという条件です。英語版Wikipedia「Maze-solving algorithm」では、すべての壁がお互いに、または外周の壁とつながっている迷路(単連結の迷路)なら、片手を壁につけたまま進めば迷わず、別の出口があればそこへ着くと書かれています。

さらに同じページでは、壁が外周とつながっていない迷路でも、入口と出口が外周の壁にあれば右手の法則で解けるとしています。つまり、入口と出口を両方とも外周に置いた平面の迷路は、どんなに壁を複雑にしても、右手の法則でいつかは出口にたどり着ける作りになっているということです。

作る人の目線でまとめると、こうなります。

  • 入口と出口が外周にあり、出口へ通じる道がある平面の迷路は、右手の法則で必ず出られる
  • 右手の法則で出られるが、通る道は最短とは限らず、行き止まりの奥まで回ることもある
  • 出口が1つなら、左右どちらの手を使っても着く先はその出口になる

また、日本語版Wikipediaの「迷路」には、ゴール以外にダミーの出口があると右手法でそちらへ行ってしまうこともあるが、その場合はダミーの出口を無視して右手法を続ければよい、とも書かれています。外周に偽物の出口を開けるのは、右手法で解く人を遠回りさせる工夫にはなっても、右手法そのものを封じる方法にはならないということですね。

ちなみに、Think Labyrinth!は右手法を、交差点に来たら常に右(または左)に曲がる方法として説明し、人間が右手を壁につけたまま歩くのと同じだと説明しています。小学生に迷路の法則を教えるときは、この分かれ道では常に右という言い方のほうが伝わりやすいかもしれませんね。

スポンサーリンク

右手の法則が通じない迷路の作り方

右手の法則で簡単に解かれたくない、という場合もありますよね。結論から言うと、ゴール(またはスタート)を迷路の内側に置き、そのまわりを外周とつながっていない壁で囲むのが、右手の法則が通じない迷路の作り方です。

Think Labyrinth!では、右手法はゴールが迷路の中央にあり、そのまわりを閉じた道が取り囲んでいる場合にはまったく働かず、中央のまわりを回って、やがて最初の場所に戻ってしまうと説明しています。英語版Wikipedia「Maze-solving algorithm」でも、スタートやゴールが道のループに囲まれた中央にある場合や、通路が上下に立体交差していて、その部分の答えの道がループに囲まれている場合には、ゴールに着くとは限らないと書かれています。

日本語版Wikipediaの「迷路」にも、スタートやゴールが迷路の中にあったり、迷路が立体的だったりする場合は、右手法の結果スタート地点に戻ってしまうことがあると書かれています。

手書きでこの仕組みを作る手順は次のとおりです。

  • ゴールを外周ではなく迷路の内側(中央付近など)に置く
  • ゴールのマスのまわりを、外周にも他の壁にも触れない壁でぐるりと囲み、1か所だけ通路として開ける(この囲いが「島」になる)
  • 入口からの道を、島の外側をぐるりと回る形で通し、島の開いた所につなげる

こうすると、入口から右手を壁につけて進んだ人は、外周とつながった壁沿いを回って入口に戻ってしまい、島の内側のゴールには入れません。

島を作るとループができるので、その迷路はもう完全迷路ではありません。答えの道が2つ以上できていないか、たどり着けない場所ができていないかを、完成後に必ず確かめてください。また、ゴールへの道を塞いでしまうと右手法が通じない迷路ではなく、解けない迷路になってしまいます。

なお、壁から手を離すタイミングを工夫したプレッジ・アルゴリズム(Pledge algorithm)という方法もあります。英語版Wikipediaによると、これは迷路の内側のどこから始めても外周の出口へ出られる方法ですが、逆に外の入口から内側のゴールを見つけることはできないとされています。中央にゴールを置く設計は、この弱点も突ける形なんですね。

スポンサーリンク

難易度は行き止まりの数と長さで変わる

行き止まりの数と長さ、正解の道と偽物の道、ループの活用の3つで迷路の難易度が変わることをまとめたスライド
迷路の難易度を左右する要素

迷路の難しさを調整したいときに見るのは、行き止まりの数と長さ、そして正解の道がどれだけ曲がりくねっているかです。

Think Labyrinth!には、迷路の「River(川)」という性質の説明があります。迷路を作るときに、水が流れ込むように近くの未完成の部分を次々に通路にしていく度合いのことで、Riverが少ない完全迷路は短い行き止まりがたくさんでき、Riverが多い迷路は行き止まりの数が少ないかわりに一つひとつが長くなると書かれています。

短い行き止まりがたくさんある迷路は、分かれ道に入ってもすぐ「違った」とわかります。一方で、長い行き止まりは奥まで進んでから引き返すことになるので、解く人の時間と根気を使わせます。これは私の目安ですが、小学生向けや簡単な迷路にしたいなら短い行き止まり中心、大人向けにしたいなら長い行き止まりや、正解の道に似た偽物の道を混ぜる、という考え方ができます。

正解の道の長さにも2つの考え方があります。Think Labyrinth!は、正解の道が迷路の大きさに比べて短くまっすぐな迷路を「elitist」、正解の道が迷路の広い範囲をさまよう迷路を「non-elitist」と呼び、よく設計されたelitistの迷路はnon-elitistの迷路よりずっと難しくなりうると書いています。正解の道を曲げて長くすれば必ず難しくなる、というわけではないんですね。

もうひとつの調整がループです。Think Labyrinth!は、行き止まりの無いブレイド迷路について、よく設計すれば同じ大きさの完全迷路よりずっと難しくなりうると書いています。行き止まりにぶつからないので「間違えた」と気づきにくく、同じ場所をぐるぐる回ってしまうからです。

ただ、ループの多い迷路は、紙の上でよく使われる行き止まりを塗りつぶす解き方が効きにくくなります。英語版Wikipediaでは、行き止まりを全部塗りつぶす方法は、ループの無い完全迷路なら正解の道だけが残るとしています。ループのある迷路で同じことをすると、考えられる答えの道がすべて残るとされていて、答えを1本に絞り込む助けにはなりにくくなります。

難易度を上げる工夫をまとめると、次の4つです。

  • 行き止まりを長くして、奥まで進ませてから引き返させる
  • 正解の道を大きく曲げて長くするか、逆に短くして長い偽物の道を添える
  • ゴールの近くに偽物の道を何本か通しておく
  • ループや島を入れて、右手の法則や塗りつぶしを効きにくくする

難しくしすぎると遊ぶ人が途中で飽きてしまうので、子どもと遊ぶなら、最初は5×5や8×8くらいの小さめのマス目で、行き止まりが短い迷路から始めるのがいいかなと思います。

法則を生かした迷路の作り方|手書きと自動生成

ここからは、ここまでの法則を使って実際に迷路を作る方法を紹介します。方眼紙を使った手書きの作り方と、パソコンで迷路を自動で作るときによく使われる3つのアルゴリズムの考え方、そして完成した迷路の検算の方法です。手書きの手順は、正解の道を先に描いてから分かれ道を足し、最後に壁を清書する流れで、前の章の法則をそのまま当てはめています。アルゴリズムは、棒倒し法・穴掘り法・壁伸ばし法の仕組みと弱点を比べたうえで、海外の資料にある作り方ごとの行き止まりの多さの比較表を紹介します(この表に載っているのは穴掘り法と同じ型の作り方で、棒倒し法と壁伸ばし法の数値は資料にありません)。アルゴリズムの考え方は、プログラムを書かない人でも手書きのルールとして使えますよ。

スポンサーリンク

方眼紙で手書き迷路を作る6つの手順

手書きで迷路を簡単に作るなら、方眼紙を使うのが失敗しにくい方法のひとつです。マス目に沿って壁を描けば、通路の幅がそろい、あとで計算による検算もできます。手順は次の6つです。

方眼紙を1冊用意しておくと、手順1のマス目をそのまま迷路の枠に使えます。たとえば次のような方眼紙があります。価格や在庫は変動するため、購入前に各ショップで確認してください。

手順1:マス目の大きさと入口・出口を決める

まず、迷路にするマス目の範囲を決めて、外周を太めに描きます。初めてなら10×10くらいまでの小さめのマス目から始めると、描く線が少なくて済みます。入口と出口は外周の壁を1マス分だけ消して作ります。右手の法則で解けてもいいなら両方とも外周に、右手の法則を封じたいならゴールを内側に置きます。

手順2:正解の道を鉛筆で薄く描く

入口から出口まで、正解の道を1本だけ鉛筆で薄く描きます。大きく曲げて迷路全体に広げる描き方のほかに、前の見出しで紹介したように、正解の道は短めにして長い偽物の道を添える描き方もあります。

手順3:正解の道から分かれ道を伸ばす

正解の道の途中から、枝分かれする道を描き足していきます。分かれ道の先は行き止まりにするか、さらに枝分かれさせます。偽物の道は、正解の道と同じくらい曲がりくねらせると見分けにくくなりますよ。

手順4:空いているマスを全部どこかの道につなぐ

まだどの道にもつながっていないマスがあれば、近くの道から枝を伸ばしてつなぎます。ここで枝どうしを2か所以上でつながないことが、ループを作らないための法則です。

手順5:壁を清書する

道が全マスに行き渡ったら、道と道の間の仕切りを壁としてペンで清書し、鉛筆の線を消します。壁を描き足していく作り方をするときは、Think Labyrinth!が標準的な完全迷路の作り方として説明している法則が役立ちます。外周の壁から始めて、新しく描く壁は片方の端だけを既存の壁につなぎ、もう片方の端はまだ壁の無い場所に置くというものです。両方の端がどこにもつながらない壁はまわりにループを作る「島」になり、両方の端が既存の壁につながる壁はたどり着けない場所を作ると説明されています。

手順6:検算して、ほかの人に解いてもらう

最後に、後の見出しで紹介するチェックポイントで検算します。問題がなければ、家族や友だちに解いてもらいましょう。作った本人は答えを知っているので、難しさは解いた人の反応で確かめるのが確実です。

紙の上で設計した迷路は、そのままダンボールの迷路の設計図にもなります。立体の迷路を組み立てるときの材料や手順は、迷路をダンボールで手作りする方法|ビー玉迷路と大型迷路の材料・手順でまとめていますので、あわせて参考にしてみてください。

スポンサーリンク

棒倒し法で作る迷路と閉じた部屋の対策

パソコンで迷路を自動で作るアルゴリズムのうち、ここではZennの解説が取り上げている棒倒し法・穴掘り法・壁伸ばし法の3つを紹介します。ここからは、プログラマー向けの情報共有サイトZennに公開されている「迷路作成アルゴリズムまとめ」の解説をもとに、それぞれの仕組みと特徴を見ていきます。

棒倒し法は、いちばんシンプルな作り方です。手順は次のとおりです。

  • 全体を通路にして、外周を壁で囲む
  • 1マスおきの位置に、等間隔で「棒(壁の柱)」を立てる
  • それぞれの棒を上下左右のどれか1方向にランダムに倒し、隣のマスを壁にする
  • このとき、すでに壁になっているマスには倒さない

手書きでもそのまま再現できるので、方眼紙に点を打って、サイコロで倒す向きを決めるといった遊び方もできますね。

ただし、棒倒し法には弱点があります。Zennの解説では、倒した棒の組み合わせによって壁に囲まれた領域(たどり着けない場所)ができることが指摘されています。対策として、2段目以降の棒は上に倒さず「下・左・右」だけに倒す補正が紹介されていますが、解説の著者はこの補正について、上の3行の通路が不自然にスカスカになり、上の3行だけを通ればスタートから右端まで移動できてしまうという迷路として致命的な欠陥ができると書いています。

つまり棒倒し法は、仕組みがシンプルで手書きでも再現しやすい反面、閉じた領域を許容できないなら、補正でごまかすより次の穴掘り法や壁伸ばし法を使ったほうがいい、というのが解説の結論です。手書きで棒倒し法を使う場合、閉じた部屋の壁を1か所消して通路につないでも、外周とつながらない壁のかたまりが残ってループができることがあります。仕上げに、後の見出しのチェック1〜3で確かめてください。

スポンサーリンク

穴掘り法と壁伸ばし法の違いと使い分け

棒倒し法・穴掘り法・壁伸ばし法の仕組みと特徴・弱点を比べた表のスライド
棒倒し法・穴掘り法・壁伸ばし法の仕組みと弱点

穴掘り法と壁伸ばし法は、どちらも閉じた領域ができない完全迷路を作れる方法です。違いは、通路を掘っていくか、壁を伸ばしていくかです。

穴掘り法:全部壁の状態から通路を掘る

穴掘り法は、最初に全体を壁で埋めておき、スタートのマスから通路を掘り進めていく方法です。Zennの解説のプログラムでは、今いる場所を掘り、ランダムな順番で上下左右を向いて、2歩先がまだ壁ならその間の1歩先を掘って2歩先へ進み、同じことを繰り返します。進める方向が無くなったら、来た道を戻って別の方向を探します。

解説では、棒倒し法と違って、囲まれた部分が絶対にできない特徴があるとされています。一方で、再帰(関数が自分自身を呼び出す書き方)で作ると大きな迷路が作れず、解説の環境では180×180程度でスタック(呼び出しの記録をためる場所)が足りなくなったと書かれています。再帰を使わない書き方に直せば、巨大な迷路も作れるそうです。

Think Labyrinth!では、同じように、掘れる隣のマスがあれば掘り、無ければ戻るという仕組みの作り方をRecursive Backtrackerと呼び、行き止まりは少ないけれど一つひとつが長く、正解の道はとても長く曲がりくねる傾向があると説明しています。手書きで穴掘り法をまねるなら、ペンを紙から離さずに、行き詰まるまで道を描き続けるイメージです。

壁伸ばし法:全部通路の状態から壁を伸ばす

壁伸ばし法は、穴掘り法とは違い、最初に全体を通路にしておき、1マスおきの位置から壁を伸ばしていく方法です。Zennの解説では、壁を伸ばしていく途中で自分の伸ばした壁にぶつかると輪ができてしまうので、それを避けるのがやや難しいとされています。

そのかわり、解説の環境では再帰を使っていてもスタックがそれほど深くならず、4096×4096の迷路まで作れたと報告されています。また、壁を伸ばし始める回数と伸ばす最大の長さを指定できるようにすると、迷路風のゲームのステージのような形も作れると紹介されています。

作り方ごとの行き止まりの多さを比較

作り方によって、できあがる迷路の性格はかなり変わります。Think Labyrinth!には、完全迷路を作る代表的な方法を比べた表があり、行き止まりになるマスの割合と、正解の道が通るマスの割合が載っています。主な方法を抜き出して、日本語で整理しました。棒倒し法と壁伸ばし法に当たる行は、この表にはありません。

作り方(Think Labyrinth!の名前) 仕組みのイメージ 行き止まりのマスの割合(目安) 正解の道が通るマスの割合(目安)
Recursive Backtracker 掘れる隣のマスへ進み、無ければ戻る(穴掘り法と同じ型) 約10% 約19.0%
Hunt and Kill(通路を掘る型の値) 掘り進め、行き詰まったら未完成の場所を探して再開 約11% 約9.5%
Recursive Division 部屋を壁で2つに分け、壁に1か所だけ穴を開けることを繰り返す 約23% 約7.2%
Binary Tree 各マスで上か左のどちらかだけに通路を作る 約25% 約2.0%
Kruskal’s Algorithm 壁をランダムな順に見て、消しても輪にならない壁だけを消す 約30% 約4.1%

Think Labyrinth!の説明によると、行き止まりの割合は平面の方眼の迷路に当てはめたときのおよその値で、正解の道の割合は、縦横100×100の通路の迷路でスタートとゴールを反対側の角に置いたときの典型的な値です。

この5つで比べると、行き止まりの割合が最も低いRecursive Backtracker(穴掘り法と同じ型)が、正解の道の割合は最も高いという結果になっています。行き止まりのマスは約10%で、正解の道は全体の約19%のマスを通ります(100×100で、スタートとゴールを反対側の角に置いた場合)。反対にBinary Treeは行き止まりが約25%で、正解の道は約2%しか通りません。

Binary Treeについて、Think Labyrinth!は、上か左にいつでも進めるので、右下から左上へは迷わずに進めてしまう、とても偏った迷路になると説明しています。作り方がいちばん簡単でも、解きごたえは期待しにくいということですね。

ちなみに、この記事を書くにあたって、穴掘り法と同じ型のプログラムで30×30の迷路を200個作り、行き止まりのマスを数えてみたところ、平均は約10.3%で、表の約10%に近い値でした。

なお、Think Labyrinth!によると、平面の方眼の完全迷路で行き止まりの割合が最も高くなりうるのは66%で、それは一本の長い道の両側に長さ1マスの行き止まりがびっしり並んだ形だそうです。行き止まりを増やせば難しくなるとは限らない、というのも面白いところです。

どちらを使うか

手書きで使い分けるなら、通路のイメージがしやすい穴掘り法は「正解の道を長く曲げたいとき」、壁を描き足していく壁伸ばし法は「壁の形で見た目を整えたいとき」に向いているかなと思います。プログラムで作るなら、どちらも閉じた領域ができない点は同じなので、作りたい大きさと、行き止まりの多さの好みで選ぶといいですよ。

アルゴリズムの細かな仕様や実装は、作る人や使うプログラミング言語によって違います。正確な情報は原典や各言語の公式サイトをご確認ください。この記事で紹介した上限の大きさ(180×180、4096×4096)は、解説の著者の環境で確かめられた値です。

スポンサーリンク

完成した迷路を検算するチェックポイント

すべてのマスに行けるか、壁の本数、行き止まりの塗りつぶし、右手の法則の4つの検算ポイントを並べたスライド
完成した迷路の検算ポイント

迷路ができたら、遊ぶ前に検算しておきましょう。手書きの迷路で見落としやすいのは、ループ、閉じた部屋、そして答えが2つある状態です。チェックポイントは次の4つです。

チェック1:すべてのマスに行けるか

入口から、色鉛筆で行けるマスを順に塗っていきます。最後まで塗れないマスが残ったら、そこは閉じた部屋です。その部屋の壁を1か所だけ消して、隣の通路とつなぎます。

チェック1の塗り分けには、手元の色鉛筆で十分です。新しく用意するなら、たとえば次のような12色のセットがあります。価格や在庫は変動するため、購入前に各ショップで確認してください。

チェック2:残った内側の壁の本数が合っているか

外周を除いた内側の壁を、マス1つ分の長さを1本として数えます。縦m行・横n列なら、完全迷路では(m−1)×(n−1)本になるはずです。10×10の迷路なら81本ですね。本数が少なければ、どこかにループがあります。チェック1で全マスに行けることを確かめたうえでこの本数が合っていれば、ループの無い完全迷路になっています。

チェック3:行き止まりを塗りつぶして答えが1本になるか

日本語版Wikipediaの「迷路」では、紙の上で解く場合は行き止まりを全て塗りつぶせば結果的に正解が浮かび上がると紹介されています。行き止まりの先から、分かれ道に着くまでを塗りつぶしていき、残った道が1本だけなら答えは1つです。2本以上残ったら、そこにループがあります。

チェック4:右手の法則で試してみる

右手を壁につけたつもりで、入口から指でたどってみます。外周に出口がある迷路なら必ず出られるはずです。右手の法則を封じる設計にしたのに出口に着いてしまったら、ゴールのまわりの島が外周や他の壁とつながってしまっていないか、ゴールが内側に置けているかを見直しましょう。

ここまで確かめれば、作った迷路で遊ぶ人が「解けない」と困ることはまず無くなるはずです。数を数える検算は、迷路を作る法則を目で確かめる練習にもなるので、子どもと一緒に作るときにもおすすめですよ。

迷路の作り方と法則についてよくある質問

右手の法則以外に、どんな迷路でも解ける方法はありますか?

トレモー・アルゴリズムという方法があります。日本語版Wikipediaの「迷路」によると、通った道に印を残しながら進むことで、あらゆる迷路を解ける解法として知られています。各通路は最大でも2回(試しに進むときと、諦めて戻るとき)しか通らないので、最悪でも通路の長さの合計の2倍歩けばゴールに着くとされています。ループの多い迷路を作ったときの答え合わせにも使えます。

丸い迷路や六角形の迷路にも同じ法則は使えますか?

一部は使えます。Think Labyrinth!では、同心円の通路でできた迷路(中心と外周にスタートとゴールを置く形)や、六角形・三角形のマスでできた迷路も分類されていて、マスのつながり方を決めれば作れると説明されています。どんな形のマスでも、ループもたどり着けない場所も無い全域木になっていれば完全迷路で、通路の本数がマスの数−1になる計算も成り立ちます。ただし、残る壁の本数の式(m−1)×(n−1)は方眼の迷路用なので、そのままは使えません。

道が立体交差する迷路(橋のある迷路)も作れますか?

作れます。Think Labyrinth!では、通路が重なって下をくぐれる迷路を「Weave Maze」と呼び、平面の迷路に近い形として分類しています。くぐる通路と行き止まりが見分けられるように描くのがポイントで、くぐる場所を作っても、ループやたどり着けない場所が無ければ完全迷路のまま作れると説明されています。ただし、英語版Wikipediaによると、通路が上下に立体交差していて、その部分の答えの道がループに囲まれていると、右手の法則ではゴールに着くとは限りません。

迷路の作り方の法則まとめ|失敗しにくくするコツ

迷路の作り方の法則を、もう一度振り返っておきます。

  • 壁を描く前に、スタートとゴールと正解の道を決める
  • 基本形は、ループも閉じた部屋も無い完全迷路(答えは1つ)
  • 縦m行・横n列の完全迷路では、残る内側の壁は(m−1)×(n−1)本になる
  • 出口へ通じる道があり、入口と出口が外周にある平面の迷路なら、右手の法則でいつかは出られる
  • 右手の法則を封じるなら、ゴールを内側に置き、外周とつながらない島の壁で囲む
  • 難しさは、行き止まりの数と長さ、正解の道の曲がり具合、ループで調整する
  • 完全迷路を自動で作るなら、閉じた領域ができない穴掘り法か壁伸ばし法が向いている

迷路は、法則を知っているだけで、作る楽しさも解く楽しさもぐっと増える遊びです。最初は方眼紙の10×10くらいから、正解の道を1本描くところから始めてみてください。完成したら、すべてのマスに行けるかと壁の本数で検算して、ぜひ誰かに解いてもらいましょう。

なお、この記事で紹介した割合や上限の大きさは、紹介した資料の条件でのあくまで一般的な目安です。学校の課題や作品として迷路を提出する場合など、ルールが決まっているときは、最終的な判断は、先生や主催者などルールを決めている方にご相談ください。

スポンサーリンク