1.イントロダクション
ケーニヒスベルクの橋。
全員知っていると言っても良いくらい、パズル好きな方々には有名な話ですよね。
中世、東プロイセンの中心都市だったケーニヒスベルク。
そこにはプレーゲル川が流れ、川の中央にはクナイプホーフ島があり、そこを中心に7本の橋がかかっていた。
4つの陸地と7つの橋が主人公であるこの問題、数学者オイラーによって解決されたことでも有名ですね。
ただし、どこから出発しても良い。
この都市は、現在はカリーニングラードという名前になっています。
バルト三国・リトアニアの南西に隣接し、ロシア連邦西側の小さな飛び地であるカリーニングラード州。
その州の最大都市です。
オイラーは陸地を点で表現し、橋の架かっている陸地A〜Dを線で結んで、簡素なネットワークに置き換えた。
そして、一筆書きの法則を発見した。
一筆書きの可否を考察する際、試行錯誤で線をたどらなくても法則1つで解決できる。
エレガントな解決方法であることは、誰もが納得するところでしょう。
グラフ理論。
ケーニヒスベルクの橋問題から始まったとされる、歴史300年ほどの比較的新しい数学分野です。
が、この分野は応用が格段に広く、例えば、道路網、鉄道網、電気回路、会社の組織図、家系図、パソコンのフォルダ階層、食物連鎖、言語の文構造など多岐にわたります。
要は「つながり」を持つ事象の構造を研究するのに大きく役立つんですね。
もちろん、インターネットやスマホなどの通信網は最たる物でしょう。
そういう「つながり」を抽象化して扱う分野がグラフ理論です。
当ページでは、迷路パズルを題材にグラフ理論の応用をちょいと語ってみたいと思います。
グラフ理論は工学や化学などさまざまな分野で独立に研究されてきたそうです。
そのため、同じものを表すのにいろいろな用語があるらしい!
そこで、当ページでは、主に『グラフ理論入門 原書第4版』『よくわかる! グラフ理論入門』の2冊で使われている用語を採用して話をしていくことにします。
グラフ理論に慣れている方々は、自分に合った用語に置き換えて読み進めていってください😊
2.グラフとは何ぞや?
とりあえず、まずは「グラフって何だ?」という話ですよね。
このセクションでは、その話をした後「木」と呼ばれるグラフを紹介しましょう。
初歩的な話ばっかりなので、「木」をご存じの方々はセクション3に進んじゃってOKです😊
一口にグラフと言っても、数学には「円グラフ」とか「2次関数のグラフ」とかもあって、ちょいとややこしい😅
グラフ理論のグラフは、それらとは違う第三のグラフです。
まず最初に、いくつかの点が置かれている。
そして、2つの点に繫がりがあれば線で結ばれる。繫がりがなければ線で結ばれない。
時には二重三重に線で結ばれたりする。
それらの点をいろいろと線で結んでいくと1つの構造ができあがる。
この構造を グラフ と呼びます。
グラフを構成しているものは点と線の2種類だけです。
点のことを 頂点 と呼び、線のことを 辺 と呼びます。
辺は頂点の結びつきを示す物なので、辺の両端には必ず頂点があります。
辺が繋がる時は必ず頂点を経由するので、辺同士が視覚的に交差していても「その2辺が繋がっている」ことを示しているわけではありません。
そこはご注意ください。
立体交差していると考えると良いでしょう。
セクション1で挙げた図もグラフです。
4つの陸地を頂点A〜Dとして、橋が架かっている時は2点が辺で結ばれています。
AB間が二重に結ばれているのは、AB間に橋が2本架かっているからですね。
ここで、陸地や橋の形状などはまったく考慮されていないことに注意しましょう。
グラフにおいて重要なのは「各頂点の繫がり具合」、たったこれだけです。
だから、頂点や辺の視覚的な位置関係を考える必要はありません。「頂点Dは一番右にある」などの情報は無視できるんです。
もちろん、辺の形状や長さも無意味です。
陸地間の接続だけが重要なのだから、陸地は頂点で済ます。橋は辺で済ます。
余計な情報を削ぎ落とせば構造がシンプルになり、複雑な事象を把握しやすくなるんですね。
これがグラフの基本のキ。
では、次に「木」と呼ばれるグラフを紹介しましょう。
図2-2 のグラフを見てみましょう。
このグラフには3つの特徴があります。
- 頂点同士が辺で結ばれている時、その辺の本数は必ず1本である。
- 閉路は1つもない。
- グラフ全体が一繋がりになっている。
この特徴を持ったグラフを 木 と呼びます。
枝分かれしてる感がまさに「木」のイメージ通りですね。
1文字だし一般的すぎる言葉なので、当ページでは 木グラフ と呼ぶことにします。
あ、「閉路」という新しい用語が現れてましたね。
異なる頂点同士が辺で繋がって一周している箇所を 閉路 と呼びます。
閉路がある場合、それは木グラフとは言いません。
注意しましょう。
さぁ、これで前準備は終わり!
次セクションからは、グラフ理論を使って迷路の話をしていきましょう。
当ページでは、ループのない迷路のみを扱います。
正解ルート以外はすべて袋小路にたどり着くという、オーソドックスな迷路です。
このタイプの迷路では、木グラフが大活躍しますよ〜😊
3.迷路を解くのもグラフ理論
さぁ、いよいよ迷路を考察していきます。
まずは「解く」という視点で語ります。
3-1.「枝分かれ」と言えばこのグラフ
……考察と言っても、まぁ、割と知られている方法が1つありますよね😓
「袋小路を続々と塗りつぶしていけば正解ルートが露わになる」という方法。
これをグラフ理論で考察してみたいと思います。
さて。
いきなりですが、迷路にある物と言えば何でしょう?
袋小路? 正解!
他にはT字路や十字路、入口や出口もありますね。
つまり、迷路には「枝分かれ」と「終端」があちこちに存在するわけです。
じゃぁ、それをグラフで表現するとどうなるか?
T字路・十字路・袋小路を頂点とし、通路を辺だと考える。
すると、こ〜んなグラフができあがる!
おぉ〜、これはまさに木グラフじゃぁないですか!
迷路は木グラフで表現できるんですね。
まぁ、木というよりは基板の回路にしか見えないけどね😅
でも、これも立派な木グラフです。
さて、迷路の目的は「スタート地点からゴールへ行く」ということですよね。
これは木グラフで言うと何に相当するんでしょう?
それは「頂点Sから頂点Gへ辺をたどる」ということです。
では、そのルートはどうやって見つけるんでしょう……?
当然ですが、迷路を攻略する上で、袋小路は邪魔なわけですよね。
となれば「袋小路を塗りつぶせばいい」というアイデアが生まれるのは必然と言えます。
このアイデア、木グラフではどういう行為に相当するんでしょう?
それは、末端の枝を刈ることと同じである。
木グラフにおいて、端点は袋小路と同じです。
だから、端点を辺ごと取っちゃえばいいんです。
まさにガーデニングで言う「庭木の剪定」と同じですね!
あっ、迷路の世界では、テレショップで大人気の高枝切りバサミは必要ありません😅
迷路の世界における庭木の剪定は、とことんまで行います。
袋小路を塗りつぶすと、枝分かれを失って袋小路に変化する箇所が現れます。それも塗りつぶします。
そうやって、枝という枝をことごとく切り落とす。
そうすれば、一本の幹だけになる。
頂点SからGまでの一本道、つまり正解ルートが露わになるというわけなんです。
迷路の正解ルート、木グラフの一本道。
両者が同じなのは一目瞭然ですね😊
3-2.グラフが方向を装備する!
さ、割と知られた手法の話はここまで。
ここからは、別の視点で考察してみましょう。
題材にする迷路とグラフはセクション3-1を流用します。
そして、この木グラフをちょっとばかり改造します!
考察の方法は至極単純。
基本に忠実、王道を行く手法をとります。
スタートからゴールまで、迷路を地道に探索してみようか!
探索というと、右手法や左手法を思い浮かべた方々はたくさんいることでしょう。
ここでは、それすら使わない基本のキに立ち返ります。
迷路をあちこち歩きましょう!
ま、せっかく木グラフがあるのだから、迷路ではなく木グラフの方を探索してみます。
まず、頂点Sから辺をたどると、頂点Aに着きました。
そこで、「SからAに来たよ〜♪」ということを表すために、辺に「方向」を付けましょう。
SからAへ、上向きの辺になりました。
頂点Aからは3方向に分かれていますが、まずは左折してみます。
すると、頂点Bに着きました。
ここでも「AからBへ来た」ことを示すために辺を方向付けします。
以下、同様にして、頂点に着くたびに「来た方向に沿って辺を方向付け」していくんです。
そうすると、下図のように、すべての辺に方向が付きました。
実は、グラフ理論には、こういう「方向付けをしたグラフ」という物もあるんです。
これを 有向グラフ と呼びます。
また、辺に方向が付くと、名前は 有向辺 または 弧 に変わります。
迷路を隅々まで探索して得られた、この有向グラフ。
このグラフからは、あることが成り立つようになりました!
- 頂点Gから矢印に逆らって有向辺をたどれば、まったく迷わずに頂点Sにたどり着く。
その道筋をSから逆にたどれば、それが正解ルートになる。
SからGへ向かう方向だと分岐ばっかりで、正解ルートを見つけるのに苦労する。
ところが、GからSへ向かう方向だと一発で正解ルートがわかってしまう。
驚きの結果ですね!
こうなる理由は簡単です。
どの有向辺も「Sから来た方向」を示しているからです。
ということは、有向辺の方向を逆にすれば、すべて「Sへ行く方向」になるんです。
「迷路」なのに迷わずに行けるなんて、なんて画期的な方法なんだ!
……と言いたいところですが、残念ながら、この方法は実戦では役に立ちません。
だって、迷路をくまなく歩き回ってるんですもの😅
辺に方向付けしている最中にゴールにたどり着いちゃうのさ😅
でも、有向グラフ化することで別の見方が生じます。
パソコンや Web関連のとある物になぞらえてその話をしましょう。
3-3.迷路はアレと構造が同じだった
グラフにおいて、頂点や辺の視覚的な性質(形状や位置関係など)は意味を持ちません。
だから、頂点同士の繫がりを勝手に変えない限り、頂点や辺を自由に変形・移動できます。
迷路の有向グラフを実際に変形してみると、枝分かれの構造になりました。
これ、何かに似てるなぁ……と考えていたら、ある物に気がついた。
パソコンや Webサイトのディレクトリ構造と同じだった!
頂点Sはルートディレクトリ。頂点1はSの子ディレクトリ。
そこから分岐して、頂点2, 10, 31は孫ディレクトリ。
以下、延々と子孫をたどって、Gは末端のファイルや Webページ。
こういった捉え方もできるんですね。
Gの URL は…… https://www.S.com/1/10/12/14/15/19/20/G.html といった感じかな?
この URL からは「トップページは https://www.S.com/ だろうなぁ」と簡単に推測できますが、これはさっき述べた「GからSへ向かう方向だと一発で正解ルートがわかる」ということと似てますね。
GからSへの道筋は1本しかないですもんね。上へ上へと親ディレクトリをたどれば良いだけだから。
迷路と枝分かれ構造は本質的に同じだった。
ということは、前者で成り立つ事柄は後者でもそのまま成り立ちます。
例えば、迷路では有名な 右手法/左手法。
迷路の左手法は枝分かれ構造でも左手法で表現できるんです。
ちなみに、プログラミングを嗜んでいる方々はご存じのことですが、この左手法は「根付き木における深さ優先探索」と同じです。
左手法と深さ優先探索、見た目は違うように見えても根っこは同じだったわけです。
こういうことがわかるのも、グラフ理論のおかげと言えますね。
「まったく別物のように見えるのに実は構造が同じだった」ということは時にあります。
同じ構造だと知るだけでも理解がグッと深まります。
個別に覚えていた2つの物が急速に繫がりを持って、一気に知識や思考の幅が広くなりますもんね。
別々の世界にポツンポツンとあった知識たちが繋がる。
まさに「点と点が線で結ばれる」という、勉強していて嬉しい瞬間ですよね。
点と点が線で結ばれる。
あら、ここにもグラフ理論が絡んでるやん!
すげぇな、グラフ理論って。
4.迷路を作るのもグラフ理論
今度は、迷路を「作る」という視点でグラフ理論を語ってみます。
迷路の作成方法はいくつかありますが、当セクションでは「壁伸ばし法」を採用します。
4-1.壁伸ばし法とは何ぞや?
まぁ、とりあえず「壁伸ばし法って何だ?」という話ですよね。
まずはそれを説明しましょう。
マスがタテヨコに並んだまっさらな盤面を用意します。
盤面には既に外壁が描かれています。
マスは点線で区切られ、点線同士の交点には小さい●がありますね。
すべての●から点線に沿って線を引いていき、迷路の壁を作っていきます。
まぁ、実際にやってみましょう!
任意に●を1個選び、上下左右に点線を次々たどって線を引いていきます。
もし線が既存の壁にぶつかったら、そこで終わり。
あ、図4-2 の緑色のように、引いてる線に自らぶつかってはいけません!
そうならないように線を引きましょう。
孤立している●がまだ存在するなら、同様に線を引いていきます。
既存の壁にぶつかったら終わり。
すべての●が壁と繋がるまでこれを繰り返します。
あ、「既存の壁」は外壁でなくてもOKです。
「既存」でありさえすればOK!
「外壁に繋がっている壁」と解釈するとわかりやすいかも。
すべての●が壁と繋がりました。
あとはスタートとゴールを適当につけて、これで迷路のできあがり!
これが 壁伸ばし法 です。
この方法で作ると、ループも分断もないオーソドックスな迷路ができあがります。
当セクションでは、木グラフの視点でこの迷路を解説してみようと思います。
4-2.迷路の壁に秘密あり
木グラフの視点で考察するために、壁伸ばし法をもう一度おさらいしましょう。
まず、まっさらな盤面を用意しましょう。
この時点で、スタート&ゴール地点の周りには外壁が2つありますね。
赤色&青色と色分けしておきましょう。
そして、頂点も適宜付けておきます。
すると、こういうことが言えますね。
- 赤色も青色も木グラフである。
- 赤色と青色は接していない。
まぁ、木というかコの字ですね😅
でも、これも立派な木グラフです。
先ほどの壁伸ばし法と同じ手順で作ってみます。
ある点から壁が伸びて外壁にぶつかった。
既存の壁にぶつかったら、その壁と同じ色に塗りましょう。
2色とも壁が増えましたが、それでもこういうことが言えますね。
- やはり赤色も青色も木グラフである。
- やはり赤色と青色は接していない。
さらに続けていって、迷路が完成!
赤色&青色ともに複雑な形になりました。
この時、こういうことが成り立っています。
- 赤色・青色ともに木グラフである。
- 2色の木グラフは接していない。
- この2色以外の木グラフは存在しない。
実は、この作り方をした時、できあがった迷路はこういう性質を持っているんです。
- この迷路にループは存在しない。
- この迷路は壁で分断されていない。
こうなる理由はこのページで説明しましょう。
赤色と青色の木グラフを壁とし、ループも分断もない迷路ができましたね。
あとは、この迷路をちょいと解いてみたい!
さて、どうやって解こうかな……?
……と思った矢先に、実は悲しいお知らせがある。
この迷路、解くまでもないんです。
なぜなら、もう正解ルートが見えてしまっているから。
- 赤色と青色の壁に挟まれたルートを歩けば良い。
たったそれだけで自然とゴールにたどり着く!
すごい😅
ホントにたどり着いた😅
理由は簡単です。
木グラフは一繋がりなので、同色の壁は一繋がりになっています。
つまり、両サイドが同色である通路を歩いている時、そこから奥へ進んでも必ず袋小路に着いちゃうんです。
だから、両サイドが異なる色の道を歩くしか術がありません。
ちなみに。
セクション3-1で行った「袋小路塗りつぶし」をやると、この理屈はすごく明快になります!
袋小路を赤色&青色で塗りつぶしてみると……
おおっ!
こりゃぁ「赤と青の間を歩け〜!」の真意がハッキリわかる😃
ただ、残念なことが1つ。
上記の理論は「スタートもゴールも迷路の外側になければならない」という条件が必要です。
迷路によってはゴールが内部にあったりしますが、そういう迷路には使えません。
壁が全部一繋がりになっちゃいますもんね。
4-3.秘技・回転ドアの術!
まず、以降の解説に先駆けて、皆さんに忍術を伝授します。
頂点を2個用意し、それらを辺で結びます。
今は辺を点線で表していますが、これに次の操作を施してみましょう。
辺だけを 90°回転させる!
まるで回転ドアのように、辺の中心で辺を回転させる。
回転後の点線は太線で表すことにしましょう。
これを、当セクションでは 回転ドアの術 と呼ぶことにします。
「ダサい名前w」とか言わないで😅
まぁ、いきなり「回転ドアの術〜ッ!」なんて言われても何のことやらですよね😅
でも、この術も迷路に関係があるので、術の話を続けたい。
小さいサイズを例に、術を説明していきましょう。
25個の頂点を格子状に繋げたグラフを用意します。
これは グリッドグラフ と呼ばれる物です。
ついでに、外壁も描いておきましょう。
まぁ、頂点をマスに見立てて、マスが5×5に並んだ盤面だとでも思ってください😊
今、25個の頂点を辺で一繋がりにした木グラフを1つ作ります。
例えば、図4-10 のように。
このようにして作った木グラフを、元のグラフの 全域木 と呼びます。
以降、「全域木」はグリッドグラフの全域木を指すものとします。
あっ、「必ずすべての頂点を一繋がりにする」ことに注意してください。
孤立した頂点があってはNG。グラフが分離していてもNGです。
さて、全域木を作ると、いくつかの辺は使われずに残りましたね。
そこで、その未使用の辺に回転ドアの術をかけてみましょう。
愚羅腐忍法! 回転ドアの術ッ!
回転後は太線で表すことにして、盤面はどう変わったでしょうか?
図4-11 の通りになりました。
あれ?
迷路になってるじゃぁないですか!
そうなんです。
グリッドグラフから全域木を抽出して、残りの辺に回転ドアの術をかけてやる。
そうしたら、なんと、迷路ができあがるんです。
この理由は、壁と未使用の辺の間に1対1対応があるからですね。
壁があれば点線はない。
壁がなければ点線はある。
図4-11 の壁に「逆回転ドアの術」をかけてやると、図4-9 に戻ります。
回転ドアの術だけで迷路ができた。
ということは、グリッドグラフ, 全域木, 壁の3つには何やら関係がありそうですね!
図4-9 のグリッドグラフには 40本 の辺がある。
図4-10 の全域木に使われている辺は全部で 24本。
残り 16本 に回転ドアの術をかけて壁にしたら、迷路ができた。
あぁ〜、真っ先に 16+24=40 が見えるねぇ……。
もちろんそれは正しい。
が、もう少し詳しく掘り下げましょう。
木グラフに関して1つの定理があります。これを使います。
- \(k\) 個の頂点を持つ木グラフは、必ず \((k-1)\) 本の辺を持つ。
これは、実際に木グラフを描いて確かめると良いでしょう。
1本の辺でしか繋がっていない頂点が必ずあるので、その頂点を辺ごと取り除いていくとわかります。
セクション3-1で行った「庭木の剪定」と同じ要領ですね。
辺がなくなるまで続けると頂点が1個だけ残るので、上記の定理が成り立つんです。
木グラフの辺の本数は、頂点の個数にしか依存しません。
だから、次のことが言えます。
- 5×5に頂点を並べたグリッドグラフは、必ず 40本の辺を持つ。
- そのグリッドグラフから抽出した全域木は、必ず 24本の辺を持つ。
- 回転ドアの術をかける対象は、決まって 16本の辺である。
必ず。必ず。決まって。
つまり、グリッドグラフのサイズが決まった瞬間、この3要素も自動的に決まっちゃうんです。
5×5のグリッドグラフの場合、常に 40本, 24本, 16本 なんですね。
そして、これは任意のサイズに一般化できます。
- \(m \times n\) の矩形状に頂点を並べたグリッドグラフは、必ず \((2mn-m-n)\) 本の辺を持つ。
- そのグリッドグラフから抽出した全域木は、必ず \((mn-1)\) 本の辺を持つ。
- 回転ドアの術をかける対象は、決まって \((m-1)(n-1)\) 本の辺である。
なぜその本数になるのかを軽く証明すると、こんな感じ。
下図の \(m \times n\) サイズのグリッドグラフには、水平の辺が \(m(n-1)\) 本、垂直の辺が \((m-1)n\) 本あります。
だから、辺の総数は
また、グリッドグラフから抽出した全域木には頂点が \(mn\) 個あります。
だから、全域木の辺の本数は
よって、回転ドアの術の対象となる辺の本数は
\begin{align} \text{(辺の本数)} &= (2mn - m - n) - (mn - 1) \\ &= mn - m - n + 1 \\ &= (m-1)(n-1) \end{align}
「必ず、必ず、決まって」と3要素が固定値だったということは、さまざまな要素も固定値になりそうですね。
一例を挙げるとこんな感じ。
- m×nサイズの迷路を入口から入り、右手法/左手法 を使って「1マス=1歩」で迷路内部を全探索するとする。
全探索を終えて入口に戻った時、\(2(mn-1)\) 歩いたことになる。
こういうことも成り立ったりする。
この理由は、迷路の全探索は全域木のすべての辺を往復1回ずつたどることと同じだからです。
これも固定値 \(2(mn-1)\) でしたね。
3要素をうまいこと応用すれば、もっと奥深い結論が得られそうですね。
例えば、ループが1カ所ある迷路に対しては、全域木に辺を1本増やして考えれば良い。
迷路が2つに分断されていれば、逆に辺を1本減らして考えれば良い。
他にも、さまざまな要素を研究できそうに思います。
迷路は入口から出口へたどるだけの遊びではなかったですね。
グラフ理論だけでもこれだけの考察ができるし、他の方法でもいろいろ法則が見つかるでしょう。
こういった研究も、迷路の楽しみ方のひとつかもしれませんね。
ここからは余談です。
そういえば、壁の枚数は \((m-1)(n-1)\) でしたね。
綺麗に因数分解できています。
それについて軽く語った後、最後に回転ドアの術で当ページを締めくくりましょう。
セクション4-1の壁伸ばし法を利用して迷路を作りました。
その迷路で壁の枚数を確かめてみましょう。
盤面のサイズは タテ10×ヨコ14 です。
実は、●から壁を伸ばした時、壁の枚数に関して法則があります。
図4-12 でわかるかも。
1個の●と1枚の壁がキッチリ対応しているんです。
●と壁の間には1対1の対応がある。
ということは、できあがった迷路には●と同じ枚数の壁がある。
じゃぁ、●の個数を調べれば……。
というわけで、壁の枚数は 9×13 枚。
まさに \((m-1)(n-1)\) の通りですね😃
最後は、回転ドアの術でセクション4-1の迷路を再び作ってみます。
下図の通り、はい完成!
……と、術が綺麗にキマったところで、これにてドロン!
ニンニン!
参考・参照
- R.J.ウィルソン 著/西関隆夫・西関裕子 共訳, 近代科学社,『グラフ理論入門 原書第4版』(初版第5刷), 2005
- 小林みどり 著, 共立出版,『よくわかる! グラフ理論入門』(初版1刷), 2021
更新履歴
- 2022.10.30.
- 新規公開。
- 2024. 5.26.
- セクション4-2で「なぜ迷路にはループも分断もないのか」の説明部分を別ページへ移動。