月刊「理系への数学」数学パズルにトドメをさす?! 今月のFlash
第25回
2012年 9月号
迷路を作れ!(その1) 〜壁を作る?壊す?〜
迷路の自動生成のプロセスを観察する

目的

記事本編で紹介したいくつかの手法で、9×9格子の迷路を自動生成するプロセスを観察し、各手法で作られる迷路の傾向の違いを体感してみましょう。

操作方法

4つの手法(柱連結方式1・2/ブロック連結方式1・2)から1つを選んでクリックし、作成ボタンを押すと、迷路を生成する過程がアニメーション表示されます。ブロック連結方式1では、迷路作成開始ブロックをクリックして指定します。また、左下のボタンで表示速度を変更できます。

迷路作成手法の紹介

柱連結方式

格子の各ブロック間に壁がない状態から、柱(格子点)を壁でつないでいく手法。追加される壁は最初に存在する孤立した柱の数と同じ64枚です。

柱連結方式1では、外周の壁とつながっている壁を延ばしていくことで全ての柱をつなぎます。

柱連結方式2では、ループを作らない範囲で任意の場所に壁を設置していき、最終的に全て外周とつながるようにします。この手法では、各柱と外周に「連結成分ID」を与え(ただし、外周には1つのIDのみを付与)、連結成分同士がつながるとそれらのIDを統合することで、別のルートでつながっている柱同士を再度つなげてループができることを回避しています。画面では同一IDを同じ色として示しています。

ブロック連結方式

格子の各ブロックが全て壁で仕切られている状態から、壁を壊していくことでブロックを連結していく手法。最初81個に仕切られているエリアが全て1つにつながるので、壊される壁は81-1=80枚です。

ブロック連結方式1では、指定された1つのブロックから始めて、そこと連結しているエリアとそれ以外のエリアの境界となっている壁を1つずつ壊して全てのブロックをつなぎます。

ブロック連結方式2では、通路のループができない範囲で任意の場所の壁を壊していき、最終的に全てのブロックが行き来できるようにします。この手法では、各ブロックに連結成分IDを与えて、既につながっているブロック同士を識別してループを回避しています。ここでも、同一IDを同じ色として表示します。

作成された迷路の解析

迷路を作成すると、左上隅のブロックから右下隅のブロックに至る最短経路を赤線で示し、その長さ(route length)を表示します。また、9月号記事本編の最後に示した、出口に近づく方向を優先して探索する行動モデルでルートを探索した場合の移動距離の期待値をsearch costとして表示します。