第3講 数独作成アプリVer.1開発その1
第3話 試行錯誤をやり直すときの問題点その1
q
例えば、赤いセルに2を入れると、
矛盾が発生します。
というのは、
f
緑のブロックには、2をどこにも入れられないからです。
というわけで、2以外を試すことになるのですが、
2を入れたときに、
k
オレンジのセルに局所構造解析を施してしまい
z
dのセルの有効リストから2が外されてしまっています。
それ以外のオレンジはもともと2が有効リストから外されているから問題ないのですが、
lのセルについては、2をもう一度有効範囲の中に戻してやらなければならないのに、
第31講第7話の 参考ダウンロード添付ファイル
には元に戻す作業を行うプロシージャが存在しません。
復元するにはどうしたらよいか。
方法は2つ考えられます。
@ 逆局所構造解析
を行う
A 局所構造解析を行う前に、もとのリスト構造を専用の配列に複写しておいて、逆複写をする
の2つの方法です。
数独自動生成アプリ9×9・16×16・25×25統合版Ver.1(2017/03/16完成)
を開発するまでは、私は@の方法で行っていましたが、
このアプリは複雑すぎて@の方法を断念しました。

では、Aの方法としてグローバル配列
Dim cmx(8, 8) As Byte
Dim crlst(8, 8, 8) As Byte
Dim hth(8, 8) As Byte
を用意しておいて、リスト構造の変換を行う前に、
  For i = 0 To n - 1
    If p(y(g), i) = 0 Then
      
hth(y(g), i) = 0
      For j = 0 To mx(y(g), i)
        If p(y(g), x(g)) = rlst(y(g), i, j) Then
          If mx(y(g), i) = 0 Then
            klk = 0
            Exit Function
          End If
          
hth(y(g), i) = 1
          For k = 0 To n - 1
            crlst(y(g), i, k) = rlst(y(g), i, k)
          Next
          cmx(y(g), i) = mx(y(g), i)

          w = rlst(y(g), i, j)
          rlst(y(g), i, j) = rlst(y(g), i, mx(y(g), i))
          rlst(y(g), i, mx(y(g), i)) = w
          mx(y(g), i) = mx(y(g), i) - 1
          Exit For
        End If
      Next
    End If
  Next

そして復元プロシージャで
Sub hukugen(g As Integer)
  Dim i As Byte, j As Byte, ybs As Byte, xbs As Byte, isy As Byte, ia As Byte
  For i = 0 To n - 1
    If hth(y(g), i) = 1 Then
      For j = 0 To n - 1
        rlst(y(g), i, j) = crlst(y(g), i, j)
      Next
      mx(y(g), i) = cmx(y(g), i)
    End If
  Next
       ・
       ・
       ・
hth(y(g), i) = 0hth(y(g), i) = 1はセルp(y(g), i)において、
変更があった、なかったを示します。
1の場合が変更があった、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入門へ
本サイトトップへ