第10講 数独の問題を解くプログラムVer0
第2話 問題解析の目的

問題解析の目的は、問題の構造を分析することです。
といっても、難しいことをしているわけではありません。

** ** ** ** ** *4 *5 *8 **
4 9 ** ** ** ** ** 6 **
8 ** 1 ** 2 ** 4 ** **
6 ** ** ** 4 ** ** ** **
** ** 2 1 ** 5 8 ** **
** ** ** ** 8 ** ** ** 9
** ** 8 ** 5 ** 3 ** 7
** 7 ** ** ** ** ** 4 6
** 4 9 2 ** ** ** ** **

という数独の問題を例に説明しましょう。

*0 *1 *2 *3 *4 *4 *5 *8 *8
4 9 11 12 13 14 15 6 17
8 19 1 21 2 23 4 25 26
6 28 29 30 4 32 33 34 35
36 37 2 1 40 5 8 43 44
45 46 47 48 8 50 51 52 9
54 55 8 57 5 59 3 61 7
63 7 65 66 67 68 69 4 6
72 4 9 2 76 77 78 79 80

黄色の番号のセルに入れることのできる数字と最大個数を調べているのです。
例えば、

*0 *1 *2 *3 *4 *4 *5 *8 *8
4 9 11 12 13 14 15 6 17
8 19 1 21 2 23 4 25 26
6 28 29 30 4 32 33 34 35
36 37 2 1 40 5 8 43 44
45 46 47 48 8 50 51 52 9
54 55 8 57 5 59 3 61 7
63 7 65 66 67 68 69 4 6
72 4 9 2 76 77 78 79 80

72

の部分に入れることのできる数は

** ** ** ** ** *4 *5 *8 **
4 9 ** ** ** ** ** 6 **
8 ** 1 ** 2 ** 4 ** **
6 ** ** ** 4 ** ** ** **
** ** 2 1 ** 5 8 ** **
** ** ** ** 8 ** ** ** 9
** ** 8 ** 5 ** 3 ** 7
** 7 ** ** ** ** ** 4 6
** 4 9 2 ** ** ** ** **

列の条件から4,8,6が除かれます。さらに、行の条件から

** ** ** ** ** *4 *5 *8 **
4 9 ** ** ** ** ** 6 **
8 ** 1 ** 2 ** 4 ** **
6 ** ** ** 4 ** ** ** **
** ** 2 1 ** 5 8 ** **
** ** ** ** 8 ** ** ** 9
** ** 8 ** 5 ** 3 ** 7
** 7 ** ** ** ** ** 4 6
** 4 9 2 ** ** ** ** **

9,2が除かれます。

** ** ** ** ** *4 *5 *8 **
4 9 ** ** ** ** ** 6 **
8 ** 1 ** 2 ** 4 ** **
6 ** ** ** 4 ** ** ** **
** ** 2 1 ** 5 8 ** **
** ** ** ** 8 ** ** ** 9
** ** 8 ** 5 ** 3 ** 7
** 7 ** ** ** ** ** 4 6
** 4 9 2 ** ** ** ** **

最後にブロックの条件か7も除かれます。

以上から

72

に入れることができる数字は1,2,3,4,5,6,7,8,9から2,4,6,7,8,9が外されて、
1,3,5のみとなり、入れることのできる最大個数は3ということになります。
このようにすべて黄色の番号のセルについて、入れられる数字とそれの最大個数を調べるのが、
問題解析の目的なのです。


第1話へ 第3話へ


VB入門講義応用編トップへ

VB入門講義トップへ