第2講 局所リスト構造解析
第3話 局所構造解析はどうやったらいいの?

白紙t
の状態における全体構造解析は
mx(0, 0) = 8
mx(0, 1) = 8
mx(0, 2) = 8
   ・
   ・
mx(1, 0) = 8
mx(1, 1) = 8
mx(1, 2) = 8
   ・
   ・

mx(8, 8) = 8


rlst(0, 0, 0)= 1
rlst(0, 0, 1)= 2
rlst(0, 0, 2)= 3
   ・
   ・
rlst(0, 0, 8)= 9
rlst(0, 1, 0)= 1
rlst(0, 1, 1)= 2
   ・
   ・
rlst(0, 1, 8)= 9
rlst(1, 0, 0)= 1
rlst(1, 0, 1)= 2
   ・
   ・

rlst(8, 8, 8)= 9
となっていました。
そこで例えば、
f
と入力された場合には、どのセルをリスト構造解析すれば良いですか。
答は例によって30行下です。































g
5が入ったことによって影響を受けるセルは、
オレンジのセルです。
このセルのmxを7に修正して、
rlstから候補数字5を外せば良いのです。
といっても、一時的に外すだけです。
今は試行錯誤で解くことを考えていますから、
5で上手くいかなければ、他の数字も試してみなければなりません。
第1話の話を少し修正します。
第1話の話をそのまま受け取ると、
オレンジにおけるセルの候補数字集合は
{1,2,3,4,6,7,8,9}
にするということになります。
ですが、5でダメだったときには、この集合は
{1,2,3,4,5,6,7,8,9}
に戻さなければなりません。
プログラムするときには、このような手順は煩わしいですから、
1,2,3,4,8,6,7,9,
8と5を交換しておいて、有効範囲を青に限定すれば
自動的には対象から1時的に外されますが、集合内には残ります。
b
つまり、
rlst(1, 4, 0) = 1
rlst(1, 4, 1) = 2
rlst(1, 4, 2) = 3
rlst(1, 4, 3) = 4
rlst(1, 4, 4) = 8
rlst(1, 4, 5) = 6
rlst(1, 4, 6) = 7
rlst(1, 4,
7) = 9
rlst(1, 4, 8) = 5

となるわけです。
青に限定するときに働くのがmx(1, 4) = 7です。
ですから、本サイトが呼ぶリスト構造解析とは正確には集合内の順番の変更と
有効範囲の変更ということになります。

mx(i, j) = 7 の実現は今のところ簡単です。
mx(i, j) = mx(i, j) - 1
とすればよいですね。
今のところ簡単ですと断り書きをしたのは、
進んでいくとmx(i, j) = mx(i, j) - 1は条件付きで実行しなければならない
場面が出てくるからです。
具体的には、
o
のような場面です。座標(1,4)の5によって、
すでに5は外されてかつmx(1, 1) = mx(1, 1) - 1が実行されていますから、
座標(4,1)においてもう一度mx(1, 1) = mx(1, 1) - 1を実行してしまうと、
mx(1, 1)の値は6になってしまいます。
でも実際には、有効範囲は
1,2,3,4,8,6,7,9,
rlst(1, 4, 0) = 1
rlst(1, 4, 1) = 2
rlst(1, 4, 2) = 3
rlst(1, 4, 3) = 4
rlst(1, 4, 4) = 8
rlst(1, 4, 5) = 6
rlst(1, 4, 6) = 7
rlst(1, 4,
7) = 9
rlst(1, 4, 8) = 5

7です。
プログラミングはあらゆる想定される事態に対応しなければなりませんから、
mx(i, j) = mx(i, j) - 1を機械的に実行するわけにはいきません。

さらに、iとjの中身が問題ですね。
gブロック内を動かすときには、難問ですが、
行と列は簡単です。
行は
b
  For j = 0 To n - 1
    If p(1, j) = 0 Then
        ・
        ・
でよいですし、列は
  For j = 0 To n - 1
    If p(j, 4) = 0 Then
        ・
        ・
でよいですよね。
(p(i, j)は最初全部0に初期化しておきます。)

ブロックはどう動かすか。次話で説明します。






第2話へ 第4話へ
004

eclipse c++ 入門
魔方陣 数独(ナンプレ)で学ぶ VBA 入門
数独(ナンプレ)のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ