第3講 数独作成アプリVer.1開発その1
第7話 疑似数独作成ソフトへ向けての第1歩の修正プログラム例
修正部分だけ掲載
Function klk(g As Integer) '局所リスト解析プロシージャ
  Dim i As Byte, j As Byte, k As Byte, w As Byte
  
For i = 0 To n_1
    For j = 0 To n_1
      hth(g, i, j) = 0
    Next
  Next

  For i = 0 To n_1
    If p(y(g), i) = 0 Then
      For j = 0 To mx(y(g), i)     
        
'この行にあったhth(g, y(g), i) = 1の削除
        If p(y(g), x(g)) = rlst(y(g), i, j) Then
                   ・
                   ・
  For i = 0 To n_1
    If p(i, x(g)) = 0 Then
      For j = 0 To mx(i, x(g))     
        
'この行にあったhth(g, i, x(g)) = 1の削除
        If p(y(g), x(g)) = rlst(i, x(g), j) Then
                   ・
                   ・
  Dim ybs As Byte, xbs As Byte
  Dim isy As Byte, ia As Byte
  ybs = rn * Int(y(g) / rn)
  xbs = rn * Int(x(g) / rn)
  For i = 0 To n_1
    isy = Int(i / rn)
    ia = i Mod rn
    If ybs + isy <> y(g) And xbs + ia <> x(g) And p(ybs + isy, xbs + ia) = 0 Then
      For j = 0 To mx(ybs + isy, xbs + ia)
        
'この行にあったhth(g, ybs + isy, xbs + ia) = 0の削除
        'ここは入れるしたらFor j = 0・・の上であろうから2重のミス

        If p(y(g), x(g)) = rlst(ybs + isy, xbs + ia, j) Then
                   ・
                   ・
End Function
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 i <> x(g) And p(y(g), i) = 0 Then
      If hth(g, y(g), i) = 1 Then
        For j = 0 To n_1
          rlst(y(g), i, j) = crlst(g, y(g), i, j)
        Next
        mx(y(g), i) = cmx(g, y(g), i)
      End If
    
End If
  Next
  For i = 0 To n_1
    
If i <> y(g) And p(i, x(g)) = 0 Then
      If hth(g, i, x(g)) = 1 Then
        For j = 0 To n_1
          rlst(i, x(g), j) = crlst(g, i, x(g), j)
        Next
        mx(i, x(g)) = cmx(g, i, x(g))
      End If
    
End If
  Next
  ybs = rn * Int(y(g) / rn)
  xbs = rn * Int(x(g) / rn)
  For i = 0 To n_1
    isy = Int(i / rn)
    ia = i Mod rn
    
If ybs + isy <> y(g) And xbs + ia <> x(g) And p(ybs + isy, xbs + ia) = 0 Then
      If hth(g, ybs + isy, xbs + ia) = 1 Then
        For j = 0 To n_1
          rlst(ybs + isy, xbs + ia, j) = crlst(g, ybs + isy, xbs + ia, j)
        Next
        mx(ybs + isy, xbs + ia) = cmx(g, ybs + isy, xbs + ia)
      End If
    
End If
  Next
End Sub
参考ダウンロード添付ファイル
どうして、
  For i = 0 To n_1
    For j = 0 To n_1
      hth(g, i, j) = 0
    Next
  Next

のような無駄なことをしなければならないのか、
わかりません。
ですが、プログラミングでは実験して上手くいく方を採用する・・・
のです。
もちろん、その際に実験は何千回もやって1回も失敗・不具合を起こさないこと、
という条件付きです。
第6話に添付した実験ソフトの修正版も添付しておきましょう。
参考ダウンロード添付ファイル


修正して疑似数独作成ソフトへ向けての第1歩を歩みましたが、
そでもたったの40セルしか埋まりません。
とても情けない話ですが、
次の工夫により81セルを場合によっては数秒で埋められるようになります。
ただし、いつでも数秒で数独が解けるのではなく、
1時間待っても解けない場合もあります。
いつでも数秒以内で出来るようにするためには、
更にもう一つの工夫が必要です。

さて、この第6話の方式の何が問題なのでしょうか。
それを明らかにするために、
第3講第2話の
参考ダウンロード添付ファイル
を改良して、
g
のように、各セルのリスト構造解析のmx(i, j)を表示させて下さい。


第6話へ 第4講第1話へ
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入門へ
本サイトトップへ