第10講 数独の問題を解くプログラムVer0
第1話 Ver(−1)からの変更点
今回解説するプログラムは数独の問題を解くプログラムVer0です。
加わったソースを最初に示しましょう。
Sub mondaikaiseki()
Dim i, j, i1, i2, i3, i4, i5, i6 As Integer
For i1 = 0 To 8
For i2 = 0 To 8
If mah(i1, i2) = 0 Then
For i3 = 0 To 8
dhs(i1, i2, i3) = 0
Next
For i3 = 0 To 8
If i2 <> i3 And mah(i1, i3) > 0 Then dhs(i1,
i2, mah(i1, i3) - 1) = 1
Next
For i3 = 0 To 8
If i1 <> i3 And mah(i3, i2) > 0 Then dhs(i1,
i2, mah(i3, i2) - 1) = 1
Next
i1s = Int(i1 / 3)
i2s = Int(i2 / 3)
For i3 = 0 To 2
For i4 = 0 To 2
If 3 * i1s + i3 <> i1 And 3 * i2s + i4
<> i2 *(実際にはここで改行はなし)
And mah(3 * i1s + i3, 3 * i2s + i4) > 0
Then dhs(i1, i2, mah(3 * i1s + i3, 3 * i2s + i4) - 1) = 1
Next
Next
For i3 = 0 To 8
If dhs(i1, i2, i3) = 0 Then
w = cnn(i1, i2)
dhs1(i1, i2, w) = i3 + 1
cnn(i1, i2) = cnn(i1, i2) + 1
End If
Next
End If
Next
Next
End Sub
また、変更点を赤で示しましょう。
Sub sakusei(g As Integer)
Dim i, j, k, l, hh, wa As Integer
If cn = 1 Then Exit Sub
j = jz(g)
i = iz(g)
If mah(i, j) > 0 Then
If g + 1 < hs Then
sakusei (g + 1)
Exit Sub
Else
cn = 1
hyouji
Exit Sub
End If
End If
mx = cnn(i, j)
For k = 0 To mx - 1
mah(i, j) = dhs1(i, j, k)
・
・
・
End Sub
さて、Sub mondaikaisekiでは何をいているのでしょうか。
名前の通り、問題を解析しています。
4次元ループになっているので、初心者の方でなくてもこれはかなり難解です。
次話以降丁寧に説明していきましょう。
第2話へ