00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "FirstFailValueHeuristic.hh"
00025
00026 int** FirstFailValue::subSet(Implicative* home,int var,int* nbRanges) {
00027 IntVar* curVar = getVar(home,whichSpaceOwns(home,var),var);
00028 for (int scope=whichSpaceOwns(home,var)+1;scope<nbSpaces(home);scope++) {
00029 if (!scopeDefined(home,scope)) {
00030 int zeValue = getVar(home,whichSpaceOwns(home,var),var)->min();
00031 *nbRanges = 1;
00032 int** ret = new int*[2];
00033 ret[0]=new int[1];
00034 ret[1]=new int[1];
00035 ret[0][0]=zeValue;
00036 ret[1][0]=zeValue;
00037 return ret;
00038 }
00039
00040 IntVarValues it(*curVar);
00041 for (;it();++it) {
00042 int val = it.val();
00043 if (!getVar(home,scope,var)->in(val)) {
00044 int zeValue = val;
00045 *nbRanges = 1;
00046 int** ret = new int*[2];
00047 ret[0]=new int[1];
00048 ret[1]=new int[1];
00049 ret[0][0]=zeValue;
00050 ret[1][0]=zeValue;
00051 return ret;
00052 }
00053 }
00054 }
00055
00056 int zeValue = getVar(home,whichSpaceOwns(home,var),var)->min();
00057 *nbRanges = 1;
00058 int** ret = new int*[2];
00059 ret[0]=new int[1];
00060 ret[1]=new int[1];
00061 ret[0][0]=zeValue;
00062 ret[1][0]=zeValue;
00063 return ret;
00064 }
00065