第6講 数独作成アプリVer.1にライン排除確定を組み込む
第4話 リスト構造解析プロシージャklkに色塗り配列khに値を入力する機能を組み込む

改良例
              ・
Sub zlk() '全体リスト構造解析プロシージャ(初期化作業も含む)
  Dim i As Integer, j As Integer, k As Integer
  cn = 0
  For i = 0 To n - 1
    For j = 0 To n - 1
      mx(i, j) = n - 1
      p(i, j) = 0
      For k = 0 To n - 1
        rlst(i, j, k) = k + 1
        
kh(i, j, k) = 1 '1は白を表し、0は色を表す。つまり、k+1は1なら入力可で0なら入力不可
      Next
    Next
  Next
End Sub
                ・
Sub 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)
        If p(y(g), x(g)) = rlst(y(g), i, j) Then
          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
          
kh(y(g), i, p(y(g), x(g)) - 1) = 0
          Exit For
        End If
      Next
    End If
  Next
  For i = 0 To n - 1
    If p(i, x(g)) = 0 Then
      For j = 0 To mx(i, x(g))
        If p(y(g), x(g)) = rlst(i, x(g), j) Then
          w = rlst(i, x(g), j)
          rlst(i, x(g), j) = rlst(i, x(g), mx(i, x(g)))
          rlst(i, x(g), mx(i, x(g))) = w
          mx(i, x(g)) = mx(i, x(g)) - 1
          
kh(i, x(g), p(y(g), x(g)) - 1) = 0
          Exit For
        End If
      Next
    End If
  Next
  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)
        If p(y(g), x(g)) = rlst(ybs + isy, xbs + ia, j) Then
          w = rlst(ybs + isy, xbs + ia, j)
          rlst(ybs + isy, xbs + ia, j) = rlst(ybs + isy, xbs + ia, mx(ybs + isy, xbs + ia))
          rlst(ybs + isy, xbs + ia, mx(ybs + isy, xbs + ia)) = w
          mx(ybs + isy, xbs + ia) = mx(ybs + isy, xbs + ia) - 1
          
kh(ybs + isy, xbs + ia, p(y(g), x(g)) - 1) = 0
          Exit For
        End If
      Next
    End If
  Next
End Sub
               ・
参考ダウンロード添付ファイル

それでは皆さん、
ライン排除確定プロシージャをつくり、
コードに組み込んでいきましょう。
これは大変難しい課題ですから、
次話で考え方を説明します。

第3話へ 第5話へ
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入門へ
本サイトトップへ