Ayuda - Algoritmo Sudoku

Iniciado por VonN, 10 Julio 2009, 04:16 AM

0 Miembros y 1 Visitante están viendo este tema.

VonN

Hola, estoy haciendo un sudoku. Me falta la parte para comprobar que un número "x" , no se repita en su cuadro de 3x3, me imagino que sabrán a que me refiero, aquellos que lo sepan jugar. He logrado hacer la comprobación por filas y columnas.

La parte que está comentada es la supuesta búsqueda pero mal hecha.
La parte de la definición de la matriz cuadros correponde a los elementos que se encuentran en cada cuadro de 3x3.

Alguna ayuda?

Código (vb) [Seleccionar]
Dim cuadros(9, 9) As Integer
Private Sub Cmd_Comprobar_Click()
For i = 0 To 80
    fila = i \ 9
    columna = i Mod 9
    For j = fila * 9 To (fila * 9) + 8
        If i <> j Then
            If Command1(j).Caption = Command1(i).Caption Then
                Command1(i).FontBold = True
            End If
        End If
    Next
    For j = columna To 72 + columna Step 9
        If i <> j Then
            If Command1(j).Caption = Command1(i).Caption Then
                Command1(i).FontBold = True
            End If
        End If
    Next
    'For k = i\3 To i\3
     '   For j = 0 To 8
      '      If cuadros(k, j) <> cuadros(fila, columna) Then
       '         If (Command1(cuadros(k, j)).Caption = Command1(i).Caption) And (Command1(cuadros(k, j)).Caption <> "") Then
        '            Command1(cuadros(k, j)).FontBold = True
         '       End If
          '  End If
        'Next
    'Next
Next
End Sub

Private Sub Cmd_LimpiarN_Click()
For i = 0 To 80
    Command1(i).FontBold = False
Next
End Sub

Private Sub Command1_Click(Index As Integer)
Dim valor As Integer
Command1(Index).FontBold = False
valor = Val(InputBox("Ingresa numero", "Sudoku", ""))
If valor > 0 And valor < 10 Then
    Command1(Index).Caption = valor
Else
    Command1(Index).Caption = ""
End If
End Sub

Private Sub Form_Load()
Dim i As Integer
For i = 0 To 80
    Command1(i).Caption = ""
Next
Cmd_Comprobar.Caption = "Comprobar"
Cmd_LimpiarN.Caption = "Limpiar comprobación"
cuadros(0, 0) = 0
cuadros(0, 1) = 1
cuadros(0, 2) = 2
cuadros(0, 3) = 9
cuadros(0, 4) = 10
cuadros(0, 5) = 11
cuadros(0, 6) = 18
cuadros(0, 7) = 19
cuadros(0, 8) = 20
cuadros(1, 0) = 3
cuadros(1, 1) = 4
cuadros(1, 2) = 5
cuadros(1, 3) = 12
cuadros(1, 4) = 13
cuadros(1, 5) = 14
cuadros(1, 6) = 21
cuadros(1, 7) = 22
cuadros(1, 8) = 23
cuadros(2, 0) = 6
cuadros(2, 1) = 7
cuadros(2, 2) = 8
cuadros(2, 3) = 15
cuadros(2, 4) = 16
cuadros(2, 5) = 17
cuadros(2, 6) = 24
cuadros(2, 7) = 25
cuadros(2, 8) = 26
cuadros(3, 0) = 27
cuadros(3, 1) = 28
cuadros(3, 2) = 29
cuadros(3, 3) = 36
cuadros(3, 4) = 37
cuadros(3, 5) = 38
cuadros(3, 6) = 45
cuadros(3, 7) = 46
cuadros(3, 8) = 47
cuadros(4, 0) = 30
cuadros(4, 1) = 31
cuadros(4, 2) = 32
cuadros(4, 3) = 39
cuadros(4, 4) = 40
cuadros(4, 5) = 41
cuadros(4, 6) = 48
cuadros(4, 7) = 49
cuadros(4, 8) = 50
cuadros(5, 0) = 33
cuadros(5, 1) = 34
cuadros(5, 2) = 35
cuadros(5, 3) = 42
cuadros(5, 4) = 43
cuadros(5, 5) = 44
cuadros(5, 6) = 51
cuadros(5, 7) = 52
cuadros(5, 8) = 53
cuadros(6, 0) = 54
cuadros(6, 1) = 55
cuadros(6, 2) = 56
cuadros(6, 3) = 63
cuadros(6, 4) = 64
cuadros(6, 5) = 65
cuadros(6, 6) = 72
cuadros(6, 7) = 73
cuadros(6, 8) = 74
cuadros(7, 0) = 57
cuadros(7, 1) = 58
cuadros(7, 2) = 59
cuadros(7, 3) = 66
cuadros(7, 4) = 67
cuadros(7, 5) = 68
cuadros(7, 6) = 75
cuadros(7, 7) = 76
cuadros(7, 8) = 77
cuadros(8, 0) = 60
cuadros(8, 1) = 61
cuadros(8, 2) = 62
cuadros(8, 3) = 69
cuadros(8, 4) = 70
cuadros(8, 5) = 71
cuadros(8, 6) = 78
cuadros(8, 7) = 79
cuadros(8, 8) = 80
End Sub







Se toma por necios a aquellos que dicen lo que todos pesamos

VonN

Tengan en cuenta que la definición de la matriz no es tan importante si se encuentra un algoritmo para buscar un elemento dentro de un cuadro de 3x3. Como verán se puede apreciar el algoritmo matemático para buscar elementos por filas y columnas, me imagino que existe uno para los cuadros 3x3 también, pero todavía no logro encontrarlo.

Muchas gracias por su ayuda.

PD: Traten de no ensuciar el post.



Se toma por necios a aquellos que dicen lo que todos pesamos

DarkItachi

#2
Perdona que no aporte nada pero me parece increible que el 75% del code sean asignaciones de array.

PD: Acabo de leer lo de no ensuciar el post, perdona :S
Come to me when you have these eyes...

By more that you try it, a feather never will achieve to fly.

VonN

Si lamentablemente no quería este tipo de mensajes.

Pero bien, la cosa es que no puedo encontrar un algoritmo matemático para reemplazarlo.



Se toma por necios a aquellos que dicen lo que todos pesamos

NsTeam

mira

te dejo 2        S.Code

para que te guies


http://www.sendspace.com/file/zdqcpf


Salu2

BlackZeroX

Cita de: NsTeam en 11 Julio 2009, 02:13 AM
mira

te dejo 2        S.Code

para que te guies


http://www.sendspace.com/file/zdqcpf


Salu2


Tu archivo no tiene nada¡!
The Dark Shadow is my passion.

h0oke

Hola VonN tu idea me ha gustado, imagino que es open source asi que lo mejoraré... Mientras, aqui te dejo un algoritmo para búsqueda en cuadros de 3x3 utilizando tu matriz:

Código (vb) [Seleccionar]
For i = 0 To 8
    For j = 0 To 8
        For k = 0 To 8
            If j <> k Then
                If Command1(cuadros(i, j)).Caption = Command1(cuadros(i, k)).Caption Then
                    Command1(cuadros(i, j)).FontBold = True
                End If
            End If
        Next
    Next
Next


Un saludo!

VonN

Exactamente FSEND a eso me refería. Parece que hay gente que no lee bien los post aqui.

Bien, ahora podré completar el trabajo, ya me estoy comunicando por MP's contigo. Es open source  :xD, unicamente lo utilizo para practicar.

Un saludo!



Se toma por necios a aquellos que dicen lo que todos pesamos

h0oke

 :xD Bien, espero tus mp's, ahora lo mejoraré.

Un saludo!