第18講 一般種法×末項確定法(魔方陣作成マクロVer.4)への挑戦
第2話 結婚の条件
0 | 4 | 2 | 0 | 4 |
0 | 3 | 3 | 1 | 3 |
4 | 0 | 2 | 3 | 1 |
4 | 1 | 0 | 4 | 1 |
2 | 2 | 3 | 2 | 1 |
3 | 3 | 0 | 2 | 2 |
0 | 2 | 4 | 3 | 1 |
0 | 1 | 2 | 3 | 4 |
4 | 0 | 4 | 1 | 1 |
3 | 4 | 0 | 1 | 2 |
結婚の条件は、二つの種が直交することです。
では、二つの種が直交するとは何でしょうか。
それは、前者をx座標、後者をy座標としてそこに碁石をおいていったとき、
碁石が重複することなくすべてに碁石がおけることです。
つまり、
(0,3)、(4,3)、(2,0)、・・・、(1,2)に碁石をおいていって重複がなければよいのです。
0 | 1 | 2 | 3 | 4 | |
0 | ○ | ○ | ○ | ○ | ○ |
1 | ○ | ○ | ○ | ○ | ○ |
2 | ○ | ○ | ○ | ○ | ○ |
3 | ○ | ○ | ○ | ○ | ○ |
4 | ○ | ○ | ○ | ○ | ○ |
さて、もう一つの留意点についてお話ししましょう。
第16講 魔方陣の作成の高速化(数万倍へ)以降gの番号付けは
0 | 1 | 2 | 3 | |
0 | 0 | 8 | 9 | 4 |
1 | 10 | 1 | 5 | 11 |
2 | 12 | 6 | 2 | 13 |
3 | 7 | 14 | 15 | 3 |
0 | 1 | 2 | 3 | 4 | |
0 | 0 | 9 | 10 | 11 | 5 |
1 | 12 | 1 | 13 | 6 | 14 |
2 | 15 | 16 | 2 | 17 | 18 |
3 | 19 | 7 | 20 | 3 | 21 |
4 | 8 | 22 | 23 | 24 | 4 |
でしたが、効率よく検索するためには番号付けを次のように変更しなければなりません。
0 | 1 | 2 | 3 | |
0 | 0 | 8 | 9 | 4 |
1 | 10 | 1 | 5 | 12 |
2 | 11 | 6 | 2 | 14 |
3 | 7 | 13 | 15 | 3 |
0 | 1 | 2 | 3 | 4 | |
0 | 0 | 9 | 10 | 11 | 5 |
1 | 12 | 1 | 15 | 6 | 16 |
2 | 13 | 17 | 2 | 19 | 20 |
3 | 14 | 7 | 21 | 3 | 23 |
4 | 8 | 18 | 22 | 24 | 4 |
(紺はy、赤はxに、ピンクはiに対応)
これは超難問です。
ですが、前に
0 | 1 | 2 | 3 | |
0 | 0 | 8 | 9 | 4 |
1 | 10 | 1 | 5 | 11 |
2 | 12 | 6 | 2 | 13 |
3 | 7 | 14 | 15 | 3 |
0 | 1 | 2 | 3 | 4 | |
0 | 0 | 9 | 10 | 11 | 5 |
1 | 12 | 1 | 13 | 6 | 14 |
2 | 15 | 16 | 2 | 17 | 18 |
3 | 19 | 7 | 20 | 3 | 21 |
4 | 8 | 22 | 23 | 24 | 4 |
を作ったときに仮屋アさんの天才的方法を
使えば出来ます。
さらに、もう一つヒントを付け加えましょう。
対角線の後は行と列を交互に進みます。
ですから、Subプロシージャを3つ用意します。
1つめは、対角線用でこれは末項確定法と基本的に同じです。
2つめは行専用、3つめは列専用です。
そして、2つめと3つめは同じことを繰り返しますから、
Subプロシージャの再帰的使用を利用するとよいでしょう。
配列a(12,12)はグローバル配列にしましょう。
第1話へ 第3話へ
VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る