第3講 第2講の魔方陣を高速化しよう!
第1話 改良点
ここでの改良点は、セル位置番号の付けたかです。
例えば、
0 | 5 | 3 |
6 | 1 | 7 |
4 | 8 | 2 |
とします。
対角線のところは、
対角線の条件が加わり条件が厳しいので
そこを先にクリアしようという発想です。
3次はあっという間に作り出してしまいますので、
前項の入れ方との差は余り感じられませんが、
4次以上だとスピードの差はかなりのものになります。
6次だとおそらく10万倍以上の速さの差になり、
前回で時間がかかりすぎて実質的に作成できなかった6次魔方陣が作れるようになります。
しかし、力業であるには違いなくこの方法では6次が限界となります。
限界を超えるためには様々な工夫を必要とします。
第4講ではハノイの塔
第5講では数独
を扱う予定になっていますので
いろいろな工夫は第6講以降に述べていくことになります。
再帰的呼び出しによる順列の作成の
Sub jyunretusakusei(g As Integer)
のgの相当するのが、上の表の番号(セル位置番号)に当たります。
これからプログラムを考えていきますが、
セルの位置を示す番号とセルの中に入る数字を明確に区別してください。
1つずれているとはいえ同じような数字なのでうっかりすると混乱し、
訳がわからなくなるからです。
最初の問題は、g(セル位置番号)と
0 | 1 | 2 | |
0 | 0 | 5 | 3 |
1 | 6 | 1 | 7 |
2 | 4 | 8 | 2 |
ピンクと赤を添え字する2次元配列とどう対応させるかです。
mah(i,j)としたとき、gとi、jをどう対応させるかと言うことです。
第2講第5話へ 第3講第2話へ