第3講 数独作成アプリVer.1開発その1
第5話 試行錯誤をやり直すときの問題点その3

ですから、
Dim cmx(8, 8) As Byte
Dim crlst(8, 8, 8) As Byte
Dim hth(8, 8) As Byte

Dim cmx(80, 8, 8) As Byte
Dim crlst(80, 8, 8, 8) As Byte
Dim hth(80, 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
       ・
       ・
       ・

  For i = 0 To n - 1
    If p(y(g), i) = 0 Then
      
hth(g, 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(g, y(g), i) = 1
          For k = 0 To n - 1
            crlst
(g, y(g), i, k) = rlst(y(g), i, k)
          Next
          cmx(
g, 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(
g, y(g), i, j)
      Next
      mx(y(g), i) = cmx(
g, y(g), i)
    End If
  Next
       ・
       ・
       ・
でなければならないのです。



それでは、皆さん疑似数独作成ソフトを作って下さい。
ただし、
      If g + 1 < hintosu Then
        sds (g + 1)
        If cn = 1 Then Exit Sub
      Else
        If g + 1 <
n * n Then
          sds (g + 1)
          If cn = 1 Then Exit Sub
        Else
          hyouji '問題表示プロシージャ
          cn = cn + 1
          Exit Sub
        End If
      End If

が正しいのですが、
n * nのままだと待てども待てども数独は出てきません。
ですから、そこは40ぐらいにしておきましょう。
40にする場合は40セルしか埋まらなかったということです。
h
0となっているところは埋まらなかったセルです。
n * nのままでも7,8時間ぐらい待てば出てくるのかも知れませんが、
私は実験を途中で打ち切ってしまいました。

数秒できるようになるには2つの工夫が必要です。
たった2つの工夫で、6時間かけても解けなかった数独が、
数秒で解けるようになるのです。
さらに、第4部の講義の進展と共にどんどん解くスピードが速くなっていって、
最終的には0.01秒以内で解けるようになるのです。



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