Fonction récursive et deux types de retour
Bonjour à tous,
Voici mon problème, j'ai entrepris de convertir une fonction récursive qui permet de générer des grilles de sudoku de PHP vers VB.
Le problème qui se pose est le type de retour qui est à la fois un Integer(,) et un booléen.
Je ne sais pas comment résoudre la solution, l'algorithme marche mis à part la fin de l'appel ( le damier est bien remplis ).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| Private Function creer_grille(Optional ByVal grille As Integer(,) = Nothing, Optional ByVal position As Integer = 0)
Dim i, j, v As Integer
Dim valeurs = New List(Of Integer)
Dim resultat As Boolean
'retourne la grille trouvée si nous sommes a la fin
If (position = 81) Then
Return (grille)
End If
'calcul de la ligne et colonne
i = Math.Floor(position / 9)
j = position Mod 9
'liste des nombres de 1 à 9
valeurs.AddRange({1, 2, 3, 4, 5, 6, 7, 8, 9})
'efface les valeurs déjà utilisées
If (v > 0) Then
For k As Integer = 0 To 8
'retire la valeur de la ligne
If (v = Int(grille(i, k))) Then
valeurs.RemoveAt(v - 1)
End If
'retire la valeur de la colonne
If (v = Int(grille(k, j))) Then
valeurs.RemoveAt(v - 1)
End If
'retire la valeur de la zone
If (v = Int(grille(i + Math.Floor(k / 3), j + (k Mod 3)))) Then
valeurs.RemoveAt(v - 1)
End If
Next
End If
'mélange les valeurs
valeurs = shuffleList(valeurs)
For Each v In valeurs
grille(i, j) = v
resultat = creer_grille(grille, position + 1)
If (resultat) Then
Return resultat
End If
grille(i, j) = Nothing
Next
Return False
End Function |
Merci d'avance pour votre aide ;)