第7講 数独作成アプリVer.2に1:1対応確定と排除を組み込む
第6話 相補確定による破綻処理例
コード変更部分
Function rhk(g As Byte) 'ライン排除確定解析+相補確定解析プロシージャ
                    ・
      If w = 1 Then '以下ライン排除確定解析
        For k = 0 To mx(j, xs(0))
          If rlst(j, xs(0), k) = i + 1 Then
            
For l = 0 To n_1  '以下ライン排除確定による破綻解析
              If l <> xs(0) And p(j, l) = 0 Then
                If mx(j, l) = 0 And rlst(j, l, 0) = i + 1 Then
'                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next
            For l = 0 To n_1
              If l <> j And p(l, xs(0)) = 0 Then
                If mx(l, xs(0)) = 0 And rlst(l, xs(0), 0) = i + 1 Then
'                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next
            ybs = rn * Int(j / rn)
            xbs = rn * Int(xs(0) / rn)
            For l = 0 To n_1
              ls = Int(l / rn)
              la = l Mod rn
              If ybs + ls <> j And xbs + la <> xs(0) And p(ybs + ls, xbs + la) = 0 Then
                If mx(ybs + ls, xbs + la) = 0 And rlst(ybs + ls, xbs + la, 0) = i + 1 Then
'                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next           '以上ライン排除確定による破綻解析

            y(g) = j
            x(g) = xs(0)
                ・
  '以下各数字に対応する列におけるライン排除確定があるかを調べるための手順
              ・
      If w = 1 Then
        For k = 0 To mx(ys(0), j)
          If rlst(ys(0), j, k) = i + 1 Then
            
For l = 0 To n_1  '以下ライン排除確定による破綻解析
              If l <> j And p(ys(0), l) = 0 Then
                If mx(ys(0), l) = 0 And rlst(ys(0), l, 0) = i + 1 Then
                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next
            For l = 0 To n_1
              If l <> ys(0) And p(l, j) = 0 Then
                If mx(l, j) = 0 And rlst(l, j, 0) = i + 1 Then
                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next
            ybs = rn * Int(ys(0) / rn)
            xbs = rn * Int(j / rn)
            For l = 0 To n_1
              ls = Int(l / rn)
              la = l Mod rn
              If ybs + ls <> ys(0) And xbs + la <> j And p(ybs + ls, xbs + la) = 0 Then
                If mx(ybs + ls, xbs + la) = 0 And rlst(ybs + ls, xbs + la, 0) = i + 1 Then
                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next           '以上ライン排除確定による破綻解析

            y(g) = ys(0)
            x(g) = j
'                 ・

  '以下各数字に対応するブロックにおけるライン排除確定があるかを調べるための手順
  
  For i = 0 To n_1 'i + 1 は入力する数字を示す。
                ・
      If w = 1 Then
        For k = 0 To mx(ys(0), xs(0))
          
If rlst(ys(0), xs(0), k) = i + 1 Then
            For l = 0 To n_1  '以下ライン排除確定による破綻解析
              If l <> xs(0) And p(ys(0), l) = 0 Then
                If mx(ys(0), l) = 0 And rlst(ys(0), l, 0) = i + 1 Then
                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next
            For l = 0 To n_1
              If l <> ys(0) And p(l, xs(0)) = 0 Then
                If mx(l, xs(0)) = 0 And rlst(l, xs(0), 0) = i + 1 Then
                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next
            ybs = rn * Int(ys(0) / rn)
            xbs = rn * Int(xs(0) / rn)
            For l = 0 To n_1
              ls = Int(l / rn)
              la = l Mod rn
              If ybs + ls <> ys(0) And xbs + la <> xs(0) And p(ybs + ls, xbs + la) = 0 Then
                If mx(ybs + ls, xbs + la) = 0 And rlst(ybs + ls, xbs + la, 0) = i + 1 Then
                  rh(g) = 0
                  rhk = 0
                  Exit Function
                End If
              End If
            Next           '以上ライン排除確定による破綻解析

            y(g) = ys(0)
            x(g) = xs(0)
                      ・
End Function


Ver.2に相補確定による破綻処理を加えたプログラム


では、さらに相補確定による排除も付け加えましょう。

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