迷路にハマった!

最近、迷路にハマっている。特に迷路のアルゴリズムが面白い。何か、アルゴリズムを活用できる分野があると思うのだが。。。

棒倒し法

迷路にハマるきっかけは、棒倒し法との出会いだった気がする。

 

棒倒し法は、グリッドに配置された、棒を倒すようにして、迷路を作成する手法。

 

もう少し詳しく書くと、奇数×奇数のグリッドを用意する。

外枠をまず、壁にする。

0から始めるx軸とy軸方向の配列でいうなら、0と、width-1、height-1の場所をtrueにする。

 

その後、x,yが偶数、偶数の箇所もtrueにする。

 

要するに、偶数、偶数のマスは、壁になることが決定する。

 

この壁になることが決定した、偶数、偶数のマスに棒を立てたと仮定して、グリッド内の上から、棒を倒していくのだ。

 

一段目の棒は、上下左右のどこかに倒すことができる。たおした方向のマスをtrueにする。つまり、壁が決定するのだ。

 

それを、左から右へ順に行うのだが、すでに壁が決定しているマスの方向に棒を倒すことはできない。

 

だから、棒を倒す前に、左隣の棒が、右方向に倒れていないかをチェックする必要がある。

 

もし、倒れていなければ、4方向に倒すことができるが、倒れているようなら、左には倒すことができないわけだ。

 

2段目の棒は、上に倒すことができない。

 

あとは、1段目と同じルールで、同じマスに棒が倒れないようにチェックしながら進む。

 

これは、最後まで繰り返すと、迷路が完成してしまう。

 

図がないと、何を言っているのかさっぱりわからないかもしれないが、迷路のプログラムは、プログラミングの練習には最適。

 

そんなわけで、自動生成迷路を扱ったサイトがいくつかある。

 

しかし、どれも単調なデザインになってしまう。

 

うまく応用させると、面白いデザインツールができると思うのだが。