Bonjour,

j'aimerai comprendre le programme suivant (solveur de sudoku par backtracking) : http://www.ai.univ-paris8.fr/~bh/cou...u/sudoku_mrv.c, là où ça se corse pour moi c'est quand je vois :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
for (grille[i_min] = 1; grille[i_min] <= 9; grille[i_min]++) {
    if (domaine[i_min][grille[i_min]] == 0)
       continue;
    /* on sauvegarde l'etat courant de domaine et domaine_taille pour
       les retablir apres l'appel recursif */
    memcpy(domaine2, domaine, sizeof(domaine));
    memcpy(domaine_taille2, domaine_taille, sizeof(domaine_taille));
    restreindre_domaines(i_min);
    backtrack();
    memcpy(domaine, domaine2, sizeof(domaine));
    memcpy(domaine_taille, domaine_taille2, sizeof(domaine_taille));
  }
grille[i_min] = INCONNU;
A quoi servent les appels à memcpy ? Je sais que cette fonction recopie le contenu de domaine dans domaine2, et inversement, mais à quoi cela sert-il ici (le commentaire ne m'aide pas vraiment ) ?
Ca a forcément un rapport avec l'appel récursif à backtrack(), mais je ne comprends rien de plus...

Merci beaucoup par avance !