12.11 Corrigés des exercices
211
}
/* une seule fo is la meme valeur par ligne */
for ( in t i i = 0; i i < ta i 11 e ; i i ++ )
if (ii != i)
if (var [ii] [j ]. aff ectee ())
i f ( v a r [ i i ] [ j ] . v a 1 e u r () -- v a 1 )
re turn fals e;
/* une seule fo is la meme valeur par colonne */
for (int jj = O; jj < taille; jj++)
if (jj != j)
if (var [i] [jj ]. aff ectee ())
i f ( v a r [ i ] [ j j ] . v a l e u r () -- v al )
re turn false;
/* une seule fo is la meme valeur par carre */
int starti = tailleCarre * ( i / tailleCarre ),
startj = tailleCarre * (j / tailleCarre );
for (int ii = starti; ii < starti + tailleCarre; ii++)
for ( int jj = startj; jj < startj + tailleCarre; jj ++ )
if ((jj != j)&& (ii != i))
if (var [ii] [jj ]. aff ectee ())
i f ( v a r [ i i ] [ j j ] . v a l e u r () == v a l )
re turn false;
re turn true;
Domaineln tervalle * choisitVariable ( int & i, int & j) {
for (i = O; i < taille; i++)
}
for (j = O; j < taille; j++)
if (!var [i] [j ]. aff ectee () )
re turn &var [ i] [j ];
re turn NULL;
int enumereValeurs ( int i, int j, int *val ) {
int nb = O;
}
for (int k = O; k < taille; k++ )
if (var [i] [j ]. presente (k)) {
val [nb] = k;
nb++;
}
re turn nb;
bool backtrack () {
in t i , j ;
Domaineln tervalle *d = choisitVariable (i , j );
if (d == NULL) re turn true;
in t val [TailleMax ], nb vals =
Précédent

- 225/256

Suivant