214
Problèmes de satisfaction de contraintes
}
int val [TailleMax ], nb_vals =
enumereValeurs (i , j, val );
for (int k = O; k < nb_vals; k++ ) {
var [i] [j ]. aff ecte (val [k]);
if (consistant (i , j, val [k]))
if (fc ())
return true ;
remet ();
var [i] [j ]. desaffecte ();
}
return false;
12.11.5 L'ordre d'instanciation des variables
Il suffit de remplacer la fonction de sélection des variables par la fonction suivante :
Domainelntervalle * choisitVariable ( in t & i, int & j) {
Domaineln tervalle *V = NULL;
}
in t min = ta i 11 e + l , memi , memj ;
for (int ibis = O; ibis < taille; ibis++)
for (int jbis = O; jbis < taille; jbis++)
if (!var [ibis ] [jbis ]. aff ectee ())
if (var [ibis ] [jbis ]. nb_valeurs ()
min = var [ibis ] [jbis ]. nb_valeurs ();
= ibis; j = jbis;
v =& var [i] [j ];
}
return v;
12.11.6 La recherche avec déviations limitées
bool Ids ( int ordre );
bool try Ids ( int i, int j, int val , int ordre ) {
var [i] [j ]. aff ecte (val );
}
if (consistant (i , j, val ))
if (Ids (ordre ))
return true ;
remet ();
var [i] [j ]. desaffecte () ;
return false;
Problèmes de satisfaction de contraintes
}
int val [TailleMax ], nb_vals =
enumereValeurs (i , j, val );
for (int k = O; k < nb_vals; k++ ) {
var [i] [j ]. aff ecte (val [k]);
if (consistant (i , j, val [k]))
if (fc ())
return true ;
remet ();
var [i] [j ]. desaffecte ();
}
return false;
12.11.5 L'ordre d'instanciation des variables
Il suffit de remplacer la fonction de sélection des variables par la fonction suivante :
Domainelntervalle * choisitVariable ( in t & i, int & j) {
Domaineln tervalle *V = NULL;
}
in t min = ta i 11 e + l , memi , memj ;
for (int ibis = O; ibis < taille; ibis++)
for (int jbis = O; jbis < taille; jbis++)
if (!var [ibis ] [jbis ]. aff ectee ())
if (var [ibis ] [jbis ]. nb_valeurs ()
= ibis; j = jbis;
v =& var [i] [j ];
}
return v;
12.11.6 La recherche avec déviations limitées
bool Ids ( int ordre );
bool try Ids ( int i, int j, int val , int ordre ) {
var [i] [j ]. aff ecte (val );
}
if (consistant (i , j, val ))
if (Ids (ordre ))
return true ;
remet ();
var [i] [j ]. desaffecte () ;
return false;
