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}
} |
Partager