Backtracking : memcpy et récursivité
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:
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 :oops: ) ?
Ca a forcément un rapport avec l'appel récursif à backtrack(), mais je ne comprends rien de plus...
Merci beaucoup par avance !