第11講 数独の問題を解くプログラムVer1の解説
第2話 第1話掲載の番号付けができあがる理由
第10講で解説したとおり、Sub mondaikaisekiでは問題の解析をしました。
そして、Sub mondaikaisekiではその空欄に入れることの出来る数字の最大個数をcnn(i1, i2)で表していました。
さて、それぞれの空欄に入れることの出来る最大個数を示してみましょう。下の図では、
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
はi1を
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
はi2を表しています。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
0 | 3 | 3 | 3 | 4 | 5 | 4 | 5 | 8 | 3 |
1 | 4 | 9 | 3 | 4 | 3 | 4 | 3 | 6 | 3 |
2 | 8 | 3 | 1 | 5 | 2 | 4 | 4 | 3 | 1 |
3 | 6 | 4 | 3 | 3 | 4 | 4 | 3 | 5 | 4 |
4 | 3 | 1 | 2 | 1 | 4 | 5 | 8 | 2 | 2 |
5 | 4 | 3 | 4 | 3 | 8 | 4 | 4 | 5 | 9 |
6 | 2 | 3 | 8 | 3 | 5 | 3 | 3 | 3 | 7 |
7 | 4 | 7 | 2 | 3 | 3 | 4 | 3 | 4 | 6 |
8 | 3 | 4 | 9 | 2 | 4 | 5 | 1 | 2 | 3 |
一番条件が厳しいのは、最大個数が1の赤のところです。
つまり、一番条件がキツイセルは3つあります。
この3つは、入れることの出来る数字は決まってしまっているのでどこから始めてもいいわけですが、
このプロシージャ(Sub bangousakusei)では、同条件のときはi2+9*i1の小さい方を優先して番号付けをしています。
i2+9*i1は次の番号に相当します。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
3 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
4 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
5 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
6 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 |
7 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |
8 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
9 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 |
だから、セル(2,8)に0,セル(4,1)に1,セル(8,6)に2の番号が割り振られます。
次に条件の厳しいのは、
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
0 | 3 | 3 | 3 | 4 | 5 | 4 | 5 | 8 | 3 |
1 | 4 | 9 | 3 | 4 | 3 | 4 | 3 | 6 | 3 |
2 | 8 | 3 | 1 | 5 | 2 | 4 | 4 | 3 | 1 |
3 | 6 | 4 | 3 | 3 | 4 | 4 | 3 | 5 | 4 |
4 | 3 | 1 | 2 | 1 | 4 | 5 | 8 | 2 | 2 |
5 | 4 | 3 | 4 | 3 | 8 | 4 | 4 | 5 | 9 |
6 | 2 | 3 | 8 | 3 | 5 | 3 | 3 | 3 | 7 |
7 | 4 | 7 | 2 | 3 | 3 | 4 | 3 | 4 | 6 |
8 | 3 | 4 | 9 | 2 | 4 | 5 | 1 | 2 | 3 |
の
2 |
です。したがって、セル(4,7)に3,セル(4,8)に4,セル(6,0)に5,セル(7,2)に6,セル(8,7)に7の番号が割り振られます。
以下同様にして、前掲の
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
0 | 80 | 9 | 10 | 33 | 48 | *4 | *5 | *8 | 11 |
1 | *4 | *9 | 12 | 34 | 13 | 35 | 14 | *6 | 15 |
3 | *8 | 16 | *1 | 49 | *2 | 36 | *4 | 17 | 0 |
3 | *6 | 37 | 18 | 19 | *4 | 38 | 20 | 50 | 39 |
4 | 21 | 1 | *2 | *1 | 40 | *5 | *8 | 3 | 4 |
5 | 41 | 22 | 42 | 23 | *8 | 43 | 44 | 51 | *9 |
6 | 5 | 24 | *8 | 25 | *5 | 26 | *4 | 27 | *7 |
7 | 45 | *7 | 6 | 28 | 29 | 46 | 30 | *4 | *6 |
8 | 31 | *4 | *9 | *2 | 47 | 52 | 2 | 7 | 32 |
ができあがるわけです。