103 lines
2.2 KiB
VB.net
103 lines
2.2 KiB
VB.net
Dim grid(9, 9)
|
|
Dim gridSolved(9, 9)
|
|
|
|
Public Sub Solve(i, j)
|
|
If i > 9 Then
|
|
'exit with gridSolved = Grid
|
|
For r = 1 To 9
|
|
For c = 1 To 9
|
|
gridSolved(r, c) = grid(r, c)
|
|
Next 'c
|
|
Next 'r
|
|
Exit Sub
|
|
End If
|
|
For n = 1 To 9
|
|
If isSafe(i, j, n) Then
|
|
nTmp = grid(i, j)
|
|
grid(i, j) = n
|
|
If j = 9 Then
|
|
Solve i + 1, 1
|
|
Else
|
|
Solve i, j + 1
|
|
End If
|
|
grid(i, j) = nTmp
|
|
End If
|
|
Next 'n
|
|
End Sub 'Solve
|
|
|
|
Public Function isSafe(i, j, n)
|
|
If grid(i, j) <> 0 Then
|
|
isSafe = (grid(i, j) = n)
|
|
Exit Function
|
|
End If
|
|
'grid(i,j) is an empty cell. Check if n is OK
|
|
'first check the row i
|
|
For c = 1 To 9
|
|
If grid(i, c) = n Then
|
|
isSafe = False
|
|
Exit Function
|
|
End If
|
|
Next 'c
|
|
'now check the column j
|
|
For r = 1 To 9
|
|
If grid(r, j) = n Then
|
|
isSafe = False
|
|
Exit Function
|
|
End If
|
|
Next 'r
|
|
'finally, check the 3x3 subsquare containing grid(i,j)
|
|
iMin = 1 + 3 * Int((i - 1) / 3)
|
|
jMin = 1 + 3 * Int((j - 1) / 3)
|
|
For r = iMin To iMin + 2
|
|
For c = jMin To jMin + 2
|
|
If grid(r, c) = n Then
|
|
isSafe = False
|
|
Exit Function
|
|
End If
|
|
Next 'c
|
|
Next 'r
|
|
'all tests were OK
|
|
isSafe = True
|
|
End Function 'isSafe
|
|
|
|
Public Sub Sudoku()
|
|
'main routine
|
|
Dim s(9)
|
|
s(1) = "001005070"
|
|
s(2) = "920600000"
|
|
s(3) = "008000600"
|
|
s(4) = "090020401"
|
|
s(5) = "000000000"
|
|
s(6) = "304080090"
|
|
s(7) = "007000300"
|
|
s(8) = "000007069"
|
|
s(9) = "010800700"
|
|
For i = 1 To 9
|
|
For j = 1 To 9
|
|
grid(i, j) = Int(Mid(s(i), j, 1))
|
|
Next 'j
|
|
Next 'j
|
|
'print problem
|
|
Wscript.echo "Problem:"
|
|
For i = 1 To 9
|
|
c=""
|
|
For j = 1 To 9
|
|
c=c & grid(i, j) & " "
|
|
Next 'j
|
|
Wscript.echo c
|
|
Next 'i
|
|
'solve it!
|
|
Solve 1, 1
|
|
'print solution
|
|
Wscript.echo "Solution:"
|
|
For i = 1 To 9
|
|
c=""
|
|
For j = 1 To 9
|
|
c=c & gridSolved(i, j) & " "
|
|
Next 'j
|
|
Wscript.echo c
|
|
Next 'i
|
|
End Sub 'Sudoku
|
|
|
|
Call sudoku
|