Bonjour à tous. Tout d'abord je tiens à préciser que j'ai regarder les sources des sudoku présents, mais ils sont au-dessus de mon niveau (ba oui, je suis un débutant autodidacte, c'est pas facile, lol).
Voila mon soucis: je veux générer une grille pleine 9*9 de sudoku. J'arrive à respecter les règles des colonnes et des lignes ( je met moins de 5 sec à la générer en moyenne) mais je ne parviens pas à trouver un algo pour la règle des grilles 3*3. J'ai bidouillé quelques trucs mais dans ce cas au bout de 2h toujours pas la moindre grille de générer (je me met à la place du gars qui veut se faire un sudoku rapidos, s'il doit attendre 10h sa grille, ...).
Voila mes lignes de commandes, vous allez surement trouver ça trés brouillons, mal organisé, voire trop compliqué mais bon, ayez pitié, lol.
Private Sub Command1_Click()
Label10 = 0
Label12 = 0
Timer1.Enabled = True
Randomize Timer
inrecominche:
sortie = 0
' Création du tableau
Dim tableau(8, 8)
For a = 0 To 8
For b = 0 To 8
tableau(a, b) = "-"
Next b
Next a
'On commence le remplissage
Dim nbr1 As Integer
Dim nbr2 As Integer
For z = 1 To 9
For a = 1 To 9
debut:
DoEvents
nbr1 = Rnd * 8
nbr2 = Rnd * 8
'On regarde si la case est vide
If tableau(nbr1, nbr2) = "-" Then GoTo Suite1
GoTo debut
Suite1:
'On vérifie les règles colonnes et lignes du Sudoku
For b = nbr1 - -1 To 8
If tableau(b, nbr2) = z Then
' La petite commande sortie c'est juste pour pas que prog tourne à l'inifini alors qu'il n'y a pas de solution
sortie = sortie - -1
If sortie = 81 Then
GoTo inrecominche
End If
GoTo debut
End If
Next b
For b = 0 To nbr1 - 1
If tableau(b, nbr2) = z Then GoTo debut
Next b
For b = nbr2 - -1 To 8
If tableau(nbr1, b) = z Then GoTo debut
Next b
For b = 0 To nbr2 - 1
If tableau(nbr1, b) = z Then GoTo debut
Next b
tableau(nbr1, nbr2) = z
sortie = 0
Next a
Next z
'Si tout est OK, on rempli les labels
b = 0
c = 0
For a = 0 To 80
Label1(a) = tableau(b, c)
c = c - -1
If c = 9 Then
c = 0
b = b - -1
End If
Next a
Timer1.Enabled = False
End Sub
Au fait pour les commandes du style b = b - - 1, je ne met pas b= b +1 parce que sinon au lieu d'ajouter 1 a la valeur précédente, ça me rajoute le chiffre 1 à la fin du nombre et ça me fait 1111111 au lieu de 7, mais je sais pas pourquoi.
Merci d'avance.