第16講 全セルリスト構造解析(全体リスト構造解析)によって数独(ナンプレ)を解く
第11話 数字を入れる度に全体構造解析=全セルリスト構造解析を繰り返すと?
プログラムのSub f(g As Byte)の部分を次のように変更して実験してみましょう。
Sub f(g As Byte)
  
  Dim i As Byte, j As Byte, k As Byte
  Dim y As Byte, x As Byte
  
  y = Int(g / 9)
  x = g Mod 9
  
  If mah(y, x) > 0 Then
    If g + 1 < 81 Then
      f (g + 1)
      If cn = 1 Then Exit Sub
    Else
      cn = cn + 1
      hyouji
      If cn = 1 Then Exit Sub (2014/12/07に訂正)
    End If
    Exit Sub
  End If
  If mah(y, x) = 0 Then
    If mx(y, x) = 0 Then Exit Sub
    For i = 0 To mx(y, x) - 1
      mah(y, x) = lst(y, x, i)
'      For j = 0 To 8
'        If j <> x Then
'          If mah(y, x) = mah(y, j) Then GoTo tobi
'        End If
'      Next
'      For j = 0 To 8
'        If j <> y Then
'          If mah(y, x) = mah(j, x) Then GoTo tobi
'        End If
'      Next
'      For k = 0 To 2
'        For l = 0 To 2
'          If y <> 3 * Int(y / 3) + k And x <> 3 * Int(x / 3) + l Then
'            If mah(y, x) = mah(3 * Int(y / 3) + k, 3 * Int(x / 3) + l) Then GoTo tobi
'          End If
'        Next
'      Next
      If g + 1 < 81 Then
        syokika
        For j = 0 To 8
          For k = 0 To 8
            If mah(j, k) = 0 Then
              Call cellkaiseki1(j, k)
              Call cellkaiseki2(j, k)
            End If
          Next
        Next
        f (g + 1)
        If cn = 1 Then Exit Sub
      Else
        cn = cn + 1
        hyouji
        If cn = 1 Then Exit Sub
        mah(y, x) = 0
        syokika
        For j = 0 To 8
          For k = 0 To 8
            If mah(j, k) = 0 Then
              Call cellkaiseki1(j, k)
              Call cellkaiseki2(j, k)
            End If
          Next
        Next
      End If
'tobi:
    Next
  End If
  mah(y, x) = 0
  
End Sub

参考ファイル

実験結果 問題
問題について
数字を入れる度に全体構造解析を繰り返した場合
実験結果
繰り返さない場合
使う方
なんと改善されるどころか大幅に悪化しました。
確かに、全体構造解析を繰り返すと選択肢は減っていきますが、
全体構造解析に多大な時間がかかり、
速度が大幅に落ちてしまうのです。
では、全体構造解析を最初の数セルにとどめておいたらどうでしょうか。
プログラムを改善しましょう。

第10話へ 第12話へ



トップ

初心者のためのc++ vc++ c言語 入門 基礎から応用までへ
初心者のための excel 2007 2010 2013 vba マクロ 入門 基礎から応用まで
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義トップへ
VB講義基礎へ
専門用語なしのC++入門へ
専門用語なしのJava入門へ
専門用語なしのVBA入門

数独のページ
魔方陣のページ
数学研究室に戻る
本サイトトップへ