00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef MINSIZE_MAXDEG_VIEWSEL_HH
00021 #define MINSIZE_MAXDEG_VIEWSEL_HH
00022
00023 #include "gecode/int/branch.hh"
00024
00025
00026
00027
00028
00029
00030 namespace Gecode { namespace Int { namespace Branch {
00031
00032
00038 class BySizeMinDegreeMax {
00039 protected:
00041 unsigned int degree;
00043 unsigned int size;
00044 public:
00046 ViewSelStatus init(const Space* home, IntView x);
00048 ViewSelStatus select(const Space* home, IntView x);
00049 };
00050
00051
00052
00053
00054
00055
00056
00057 forceinline ViewSelStatus
00058 BySizeMinDegreeMax::init(const Space*, IntView x) {
00059 degree = x.degree(); size = x.size();
00060 return VSS_SELECT;
00061 }
00062
00063 forceinline ViewSelStatus
00064 BySizeMinDegreeMax::select(const Space*, IntView x) {
00065 if (x.size() < size) {
00066 degree = x.degree();
00067 size = x.size();
00068 return VSS_SELECT;
00069 } else if ( (x.size() == size) && (x.degree() > degree) ) {
00070 degree = x.degree();
00071 return VSS_SELECT;
00072 }
00073 return VSS_NONE;
00074 }
00075
00076
00077 }
00078 }
00079 }
00080
00081 #endif