第31講 数独(ナンバープレイス)問題解決ソフトVer.2の制作
(数独(ナンバープレイス)問題作成ソフトに挑戦する人は☆☆)


第3話 問題全体構造解析はどのようにしたら出来るか


c++

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

リストはどうのようにしたら出来るでしょうか。

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


(座標(3,4)(座標は0から始まるので3,4です。))を例に説明しましょう。最初にすべてをリストしておきます。

座標(3,4)のリスト 


c++
まず、行の条件から6と3をリストから外します。
このときは省いた候補数もカウントしておきます。
カウントは2です。

座標(3,4)のリスト 
× ×


次に、入門列の条件から9,2,8を除外します。

座標(3,4)のリスト 
× × × × ×

カウントは重複がないので2+3=5となります。
最後に、c++入門ブロックの条件から1,4,5を対象外にします。

座標(3,4)のリスト 
× × × × × × × ×

今回も重複がないのでカウントは5+3=8となります。
残っている候補は、7のみです。
したがって、最大可能個数は9-8=1です。
これで座標(3,4)初心者のリストと最大可能個数が求まりました。

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

次に、座標(0,3)初歩のリストを追ってみましょう。

座標(0,3)のリスト 

まず行の条件

1 4

から1,4が候補から除外されます。

座標(0,3)のリスト 
× ×

外した候補数は2です。
次に、

9
2
8








列の条件から9,2,8を外します。

座標(0,3)のリスト 
× × × × ×


外した候補数は2+3=5です。

最後に

9 6



ブロックの条件から9,6を外します。

座標(0,3)のリスト 
× × × × × ×

6が重複していたので外した候補数は5+2-1から6です。
表で○、×で表しているところは実際には1と0を対応させればコードが出来ます。




第2話へ 第4話へ

戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)