第22講 数独=ナンプレの自動生成
第3話 ラテン方陣解答例
コード
Dim m(9, 9), cn As Integer
Private Sub CommandButton1_Click()
cn = 0
f (0)
End Sub
Sub f(g As Integer)
Dim x As Byte, y As Byte
y = Int(g / 9)
x = g Mod 9
Dim i, j, k As Byte
Dim cna As Integer, cns As Integer
For i = 1 To 9
m(x, y) = i
If x > 0 Then
For j = 0 To x - 1
If m(x, y) = m(j, y) Then GoTo tobi
Next
End If
If y > 0 Then
For j = 0 To y - 1
If m(x, y) = m(x, j) Then GoTo tobi
Next
End If
If g + 1 < 81 Then
f (g + 1)
Else
cna = cn Mod 9
cns = Int(cn / 9)
For j = 0 To 8
For k = 0 To 8
Cells(7 + 10 * cns + j, 1 + 10 * cna + k) = m(j, k)
Next
Next
cn = cn + 1
End If
tobi:
Next
End Sub
Private Sub CommandButton2_Click()
Cells.Select
Selection.ClearContents
Cells(1, 1).Select
End Sub
実行例
ダウンロード用参考ファイル
さて、次の課題です。
上のコードを改良して、実行画面が
となるようにしましょう。つまり、ブロックがわかるように境界線を入れるということです。
かなりの難問ですよ。
第2話へ 第4話へ
VBA講義第1部へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る