Bonjour,bonjour,

Me lançant dans la programmation d'un algo de résolution de sudoku avec R, je boue en ce moment même !

J'arrive à avoir la solution finale, ... mais seulement en arrêtant ma fonction avec un browser() et en affichant le résultat.
Seulement quand je fais continuer (ie c), la fonction me renvoie la grille de sudoku avec seulement, le premier pas de ma fonction récursive d'effectué.

Pourtant la solution finale est bien calculé dans la fonction, on peut l'afficher, je l'avais sous les yeux ! D’où mon agacement

Voici la partie recusive de mon algo :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
 resolution<-function(mat,pos)
{
 
  if (pos>81){
 
    out<-list(0,0)     
    out$mat<-mat
    out$bool<-TRUE
    browser()      # ici au moment du stop, si je demande d'afficher 'mat', j'ai bien la grille de sudoku complète qui s'affiche
    return(out)
    }
  #else  {
        i=ceiling(pos/9)
        j=pos%%9
        if (j==0) {j=9}
 
        mat<-Simple(mat) #résoud toutes les solutions "simples" (ie sans double choix) de la grille de sudoku   
 
          if (mat[i,j]!=0){
            return(resolution(mat,pos+1))
            }
          #else{
            a<-CubeSol(mat)
            nbsol<-a$nb     #donne une matrice contenant le nombre de solution possible pour chaque case
            sol<-a$sol      # donne un tableau (3 dimensions) avec pour chaque case (i,j) un vecteur composé des solutions acceptables pour cette case
            if (nbsol[i,j]!=0){    
                for (k in (nbsol[i,j]:1)){     #toutes les solutions acceptables pour la case (i,j)
                  mat[i,j]=sol[i,j,k]          #remplissage de la case par la k-eme solution
                  if ((resolution(mat,pos+1))$bool==TRUE){   # si c'est OK au rang n+1 alors je renvoie TRUE
                    out<-list(0,0)
                    out$mat<-mat
                    out$bool<-TRUE
                    return(out)
                  }
                  mat[i,j]=0                   
            out<-list(0,0)
            out$mat<-mat
            out$bool<-FALSE
            return(out) 
                }
            }
 
 
          #else}
        #else}
 
 }
Des commentaires ou solution ?
Je débute avec ce langage, il se peut qu'il y ait donc de grossières erreurs...

Merci d'avance !