hi,
ok this might be real easy for u guys.. ;)
Heres my VB code for the program. The codes used are based from other codes and tips from this forum. So far generating right numbers for all 9 row and 9 columns works well. The problem is i cannot generate the right numbers for the smaller [3X3] boards. Help
My code has 2 arrays..
1) Numbers(81) for the 81 squares in sudoku board
2) Check(9), additional array which stores used numbers from 1 to 9
'81 array for the 81 squares
Dim Numbers(80) As Integer
Dim Index As Integer
'initialize the random # generator.
Private Sub Form_Load()
Index = 0
Randomize
End Sub
'generate random numbers
Public Function Rand(ByVal Low As Long, _
ByVal High As Long) As Long
Rand = Int((High - Low + 1) * Rnd) + Low
End Function
'POPULATE SUDOKU
Private Sub cmdPopulate_Click()
Dim Number As Integer
Dim Check(9) As Integer
Dim CheckIndex As Integer
Dim Loops As Integer
Dim Col As Integer
Dim Row As Integer
Dim X As Integer
Dim Y As Integer
Dim ColIndex As Integer
CheckIndex = 0
X = 0
Y = 0
'fills 81 squares with random numbers from 1 to 9
For Index = 0 To 80
Number = Rand(1, 9)
'stores the numbers inside Numbers(80) array
Numbers(Index) = Number
Next Index
'loops 0 to 8 time, each time it loops y + 9
For Loops = 0 To 8
'loops 0 to 8 time, every time it loops x + y = index
For X = 0 To 8
Index = X + Y
'Check() is an array which represents 9 digits from 1 to 9
'each time this numbers is used in the puzzle, the array will mark 1
'if number is not used at all, array will mark 0
'first, fills Check() with 0. Since no number has been tried
For CheckIndex = 1 To 9
Check(CheckIndex) = 0
Next CheckIndex
'start checking each row and column
'used numbers is assign to Check()
For CheckIndex = 1 To 9
'Check Row
For Row = 0 + Y To 8 + Y
'each time a number is used inside the row, array marks 1
If Numbers(Row) = CheckIndex Then
Check(CheckIndex) = Check(CheckIndex) + 1
End If
'Check Column
For Col = Index - Y To 72 + Index - Y Step 9
'check to make sure column is less then 81
If Col <= 80 Then
'each time a number is used inside the column, array marks 1
If Numbers(Col) = CheckIndex Then
Check(CheckIndex) = Check(CheckIndex) + 1
End If
End If
Next Col
lblCheck(CheckIndex).Caption = Check(CheckIndex)
Next Row
Next CheckIndex
'now all the used numbers will be replace with the unused numbers.
If Index <= 80 Then
For CheckIndex = 1 To 9
'numbers with 0 value means it has not been used
'this will replace used numbers
If Check(CheckIndex) = 0 Then
Numbers(Index) = CheckIndex
txtBox(Index).Text = " " & CheckIndex & " "
lblDisplay.Caption = "FILLED!"
End If
Next CheckIndex
End If
Next X
Y = Y + 9
Next Loops
End Sub
i cudnt think of a way. ideas please.
thanks.
-haN!-