63 50,42,37,35,33,29,27,25,24,19,18,17,16,15,11,9,8,7,6,4,2
67 60,50,28,27,26,24,23,22,21,18,17,16,15,14,13,12,8,7,6,4,3,2
71 86,71,62,59,57,49,47,41,37,36,35,31,28,26,19,17,14,12,10,9,8,4
75 44,41,38,37,32,31,29,28,21,19,16,15,14,13,12,10,8,7,5,4,3,2,1
79 129,123,120,112,91,89,83,68,58,56,53,50,49,48,47,38,31,30,26,24,17,15,1
83 47,46,41,40,34,33,32,25,23,20,19,17,16,15,14,13,12,10,9,8,6,5,4,3
87 175,174,164,160,155,150,140,130,86,77,68,60,52,44,43,35,29,28,26,24,23,17,6,5
91 74,73,41,40,34,33,32,27,25,23,20,19,17,16,15,14,13,12,10,9,8,6,5,4,3
95 262,248,238,210,203,196,175,161,111,106,102,84,83,77,73,64,41,38,36,31,23,18,17,7,5
99 99,85,65,62,57,56,55,48,39,38,32,28,26,24,23,20,19,17,16,12,7,6,5,4,2,1
103 86,72,67,64,61,56,55,44,43,39,36,35,34,32,30,29,27,26,23,20,19,10,9,8,6,5
107 304,302,288,277,246,235,233,189,157,135,127,117,109,92,90,83,81,76,57,53,49,37,26,25,8,5
111 89,56,51,50,48,43,41,40,39,36,34,31,29,25,23,21,19,16,15,13,12,10,9,7,6,4,1
115 484,440,387,379,360,352,316,308,198,194,168,149,145,119,114,108,82,80,69,66,63,50,42,35,29,24,18
119 77,70,68,67,64,56,54,39,38,36,34,32,30,24,22,21,18,17,16,13,12,11,10,6,4,3,2,1
123 649,615,510,473,456,439,419,385,260,216,214,208,203,175,147,135,125,116,104,94,81,55,49,17,12,7,6,4
127 112,107,84,75,68,64,59,51,49,43,37,36,31,29,28,27,26,25,24,22,17,15,13,11,8,7,6,2,1
131 855,769,761,717,648,604,562,518,338,293,292,286,265,226,224,204,186,179,174,165,161,109,100,91,69,45,43,17,9
135 88,82,79,76,73,56,53,46,45,43,40,39,36,34,33,32,29,27,25,24,23,21,20,16,11,10,9,5,3,1
139 992,981,948,936,826,782,781,737,465,440,418,289,272,264,260,242,227,210,208,154,140,124,122,108,92,64,29,16,15,4
143 219,173,156,135,134,128,124,118,114,95,81,79,71,65,63,59,58,55,54,51,49,46,34,33,32,31,28,24,21,20,19,18,17,16,14,10,8,4,3,1
147 409,408,396,345,317,316,242,238,221,198,166,159,157,143,130,123,120,117,109,102,101,93,87,79,76,67,64,55,53,49,46,44,39,33,21,19,14,13,5,3
151 301,300,246,242,187,182,177,168,145,139,135,128,114,110,103,93,87,84,82,81,79,73,69,63,58,57,52,51,49,47,41,40,34,33,26,23,22,21,20,19,18,15,13,11,10,9,8,7,4,2
155 588,446,305,283,175,163,160,138,132,130,128,124,120,116,110,107,106,103,101,100,94,86,85,82,80,77,74,64,63,62,61,60,57,54,47,46,45,43,40,39,32,30,28,27,26,25,22,7,6,1
159 645,452,268,264,204,188,184,176,172,165,161,143,132,127,116,114,108,104,100,94,92,90,88,84,75,74,72,71,69,68,67,64,62,61,56,51,46,36,34,30,29,28,26,25,21,20,19,18,17,16,15,14,12,10,9,7,5,4,2,1
163 638,554,335,303,285,271,219,180,174,159,149,148,136,125,110,98,94,85,77,76,75,74,72,71,69,65,63,62,61,60,59,57,55,51,50,49,48,47,46,45,44,43,40,39,37,35,32,31,25,16,15,14,12,10,9,8,6,4,2,1
167 793,619,473,320,287,207,188,181,179,170,167,153,151,149,142,140,132,127,121,117,116,106,105,103,97,93,92,91,90,87,84,83,82,76,74,73,72,71,70,69,67,66,65,64,63,61,54,53,49,45,39,38,35,34,33,32,30,29,28,27,26,24,21,20,19,18,15,14,13,11,10,9,6,5,3
171 const int* specs[] = {
172 &s00[0],&s01[0],&s02[0],&s03[0],&s04[0],
173 &s05[0],&s06[0],&s07[0],&s08[0],&s09[0],
174 &s10[0],&s11[0],&s12[0],&s13[0],&s14[0],
175 &s15[0],&s16[0],&s17[0],&s18[0],&s19[0],
176 &s20[0],&s21[0],&s22[0],&s23[0],&s24[0],
179 const unsigned int n_specs =
sizeof(specs) /
sizeof(
int*);
203 : x(*this,specs[opt.
size()][0],0,specs[opt.
size()][1]-1),
204 y(*this,specs[opt.
size()][0],0,specs[opt.
size()][1]-1) {
206 const int* s = specs[opt.
size()];
211 for (
int i=n;
i--; ) {
228 for (
int cx=0; cx<w; cx++) {
230 for (
int i=0;
i<
n;
i++)
231 dom(*
this, x[
i], cx-s[i]+1, cx, bx[i]);
234 for (
int cy=0; cy<w; cy++) {
236 for (
int i=0;
i<
n;
i++)
237 dom(*
this, y[
i], cy-s[i]+1, cy, by[i]);
242 case PROP_CUMULATIVES:
245 for (
int i = n;
i--; ) {
290 os <<
"(" << x[
i] <<
"," << y[
i] <<
") ";
306 opt.
parse(argc,argv);
307 if (opt.
size() >= n_specs) {
308 std::cerr <<
"Error: size must be between 0 and " << n_specs - 1
312 Script::run<PerfectSquare,DFS,SizeOptions>(
opt);
void size(unsigned int s)
Set default size.
Options for scripts with additional size parameter
Example: Packing squares into a rectangle
void linear(Home home, const FloatVarArgs &x, FloatRelType frt, FloatNum c)
Post propagator for .
void propagation(int v)
Set default propagation value.
void c_d(unsigned int d)
Set default copy recomputation distance.
virtual void print(std::ostream &os) const
Print solution.
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
void update(Space &, bool share, VarArray< Var > &a)
Update array to be a clone of array a.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
IntVarBranch INT_VAR_MIN_MIN(BranchTbl tbl)
Select variable with smallest min.
virtual Space * copy(bool share)
Copy during cloning.
Parametric base-class for scripts.
void a_d(unsigned int d)
Set default adaptive recomputation distance.
Gecode::IntArgs i(4, 1, 2, 3, 4)
PerfectSquare(const SizeOptions &opt)
Actual model.
int n
Number of negative literals for node type.
IntValBranch INT_VAL_MIN(void)
Select smallest value.
unsigned int size(I &i)
Size of all ranges of range iterator i.
int main(int argc, char *argv[])
Main-function.
void cumulatives(Home home, const IntVarArgs &m, const IntVarArgs &s, const IntVarArgs &p, const IntVarArgs &e, const IntVarArgs &u, const IntArgs &c, bool at_most, IntConLevel cl)
Post propagators for the cumulatives constraint.
Passing integer variables.
Passing integer arguments.
Passing Boolean variables.
int size(void) const
Return size of array (number of elements)
BoolVar expr(Home home, const BoolExpr &e, IntConLevel icl)
Post Boolean expression and return its value.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
IntVarArray x
Array of x-coordinates of squares.
void nooverlap(Home home, const IntVarArgs &x, const IntArgs &w, const IntVarArgs &y, const IntArgs &h, IntConLevel)
Post propagator for rectangle packing.
Gecode toplevel namespace
BrancherHandle branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
Use cumulatives constraint.
PerfectSquare(bool share, PerfectSquare &s)
Constructor for cloning s.
IntVarArray y
Array of y-coordinates of squares.
#define GECODE_NEVER
Assert that this command is never executed.