altozinzin
Messages postés54Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 6 mai 2011
-
17 mars 2007 à 19:49
najma0202
Messages postés10Date d'inscriptionmardi 16 octobre 2007StatutMembreDernière intervention23 décembre 2007
-
1 nov. 2007 à 23:27
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.
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.
damienpasqualinotto
Messages postés16Date d'inscriptionsamedi 4 mars 2006StatutMembreDernière intervention 1 décembre 2007 8 juil. 2007 à 22:48
Salut, c'est peut être trop tard mais pour ton probleme de la régle des grilles de 3x3 je pense qu'il vaut mieu que tu utilise un tableau de (2*2*2*2) plutot que de (8*8). C'est surment plus compliqué pour les coordonée des case mais au moins tu poura en plus des lignes et des colones gérer les grandes cases dans ta vérification des régles