42#ifdef GECODE_HAS_SET_VARS
60#ifdef GECODE_HAS_SET_VARS
97#ifdef GECODE_HAS_SET_VARS
111 for (
int i=0; i<nn; i++) {
117 for (
int i=0; i<nn; i+=
n) {
118 for (
int j=0; j<nn; j+=
n) {
124 for (
int i=0; i<nn; i++)
125 for (
int j=0; j<nn; j++)
129#ifdef GECODE_HAS_SET_VARS
132 for (
int b=0;
b<
n;
b++) {
139 for (
int i=0; i<
n; i++)
140 for (
int j=0; j<
n; j++) {
142 for (
int k=0; k<
n; k++) {
147 bc1[b1c] = bc1s[
count];
148 br1[b1c] = br1s[
count];
156 bc2[b2c] = bc2s[
count];
157 br2[b2c] = br2s[
count];
162 same(*
this, nn, bc1, bc2);
163 same(*
this, nn, br1, br2);
196 for (
int i = 0; i<
n*
n*
n*
n; i++) {
197 if (
x[i].assigned()) {
201 os << (char)(
x[i].val()+
'A'-10) <<
" ";
206 os << std::endl <<
" ";
211#ifdef GECODE_HAS_SET_VARS
223 return m.
slice(bc*
n+i, bc*
n+i+1, j*
n, (j+1)*
n);
229 return m.
slice(j*
n, (j+1)*
n, br*
n+i, br*
n+i+1);
234#ifdef GECODE_HAS_SET_VARS
249 static_cast<unsigned int>(
n*
n),static_cast<unsigned int>(
n*
n)) {
259 int* dsc =
r.alloc<
int>(nn);
260 for (
int i=0; i<nn; i++) {
261 row[i] =
IntSet((i*nn)+1, (i+1)*nn);
263 for (
int j=0; j<nn; j++) {
270 int* dsb_arr =
r.alloc<
int>(nn);
271 for (
int i=0; i<
n; i++) {
272 for (
int j=0; j<
n; j++) {
274 for (
int ii=0; ii<
n; ii++) {
275 for (
int jj=0; jj<
n; jj++) {
276 dsb_arr[ii*
n+jj] = j*nn*
n+i*
n+jj*nn+ii+1;
279 block[i*
n+j] =
IntSet(dsb_arr, nn);
289 for (
int i=0; i<nn; i++)
290 for (
int j=0; j<nn; j++) {
300 for (
int i=0; i<nn; i++)
301 for (
int j=0; j<nn; j++)
333 for (
int i = 0; i<
n*
n*
n*
n; i++) {
334 for (
int j=0; j<
n*
n; j++) {
335 if (
y[j].contains(i+1)) {
339 os << (char)(j+1+
'A'-10) <<
" ";
344 os << std::endl <<
'\t';
365 SetVar dummySet0(*
this, is0, is0);
366 IntVar dummyInt0(*
this, 0, 0);
369 for (
int i=0; i<nn; i++)
373 for (
int i=0; i<nn*nn; i++)
379 for (
int i=0; i<nn; i++)
410#ifdef GECODE_HAS_SET_VARS
415 "use both integer and set constraints");
419 "additional \"same\" constraint for integer model");
427 opt.
parse(argc,argv);
428 if (opt.size() >= n_examples) {
429 std::cerr <<
"Error: size must be between 0 and "
430 << n_examples-1 << std::endl;
433#ifdef GECODE_HAS_SET_VARS
434 switch (opt.model()) {
struct Gecode::@603::NNF::@65::@66 b
For binary nodes (and, or, eqv)
union Gecode::@603::NNF::@65 u
Union depending on nodetype t.
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Parametric base-class for scripts.
static void run(const Options &opt, Script *s=NULL)
Passing integer arguments.
static const IntSet empty
Empty set.
Passing integer variables.
Matrix-interface for arrays.
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
Slice< A > col(int c) const
Access column c.
Slice< A > row(int r) const
Access row r.
Options for scripts with additional size parameter
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
Example: Solving Sudoku puzzles using integer constraints
virtual Space * copy(void)
Perform copying during cloning.
SudokuInt(const SizeOptions &opt)
Constructor.
@ PROP_NONE
No additional constraints.
@ PROP_SAME
Use "same" constraint with integer model.
virtual void print(std::ostream &os) const
Print solution.
SudokuInt(SudokuInt &s)
Constructor for cloning s.
IntVarArray x
Values for the fields.
Example: Solving Sudoku puzzles using both set and integer constraints
SudokuMixed(SudokuMixed &s)
Constructor for cloning s.
virtual void print(std::ostream &os) const
Print solution.
virtual Space * copy(void)
Perform copying during cloning.
SudokuMixed(const SizeOptions &opt)
Constructor.
Example: Solving Sudoku puzzles using set constraints
SetVarArray y
The fields occupied by a certain number.
virtual Space * copy(void)
Perform copying during cloning.
virtual void print(std::ostream &os) const
Print solution.
SudokuSet(SudokuSet &s)
Constructor for cloning s.
SudokuSet(const SizeOptions &opt)
Constructor.
Base class for Sudoku puzzles.
@ BRANCH_NONE
Use lexicographic ordering.
@ BRANCH_SIZE_AFC
Use minimum size over afc.
@ BRANCH_SIZE
Use minimum size.
@ BRANCH_SIZE_DEGREE
Use minimum size over degree.
@ BRANCH_AFC
Use maximum afc.
int main(int argc, char *argv[])
Main-function.
int example_size(const char *s)
The size of an instance.
Sudoku(const SizeOptions &opt)
Constructor.
const char * examples[]
The specifications.
int sudokuField(const char *s, int n, int i, int j)
Return value at position (i,j) in the example s of size n.
const int n
The size of the problem.
Sudoku(Sudoku &s)
Constructor for cloning s.
@ MODEL_INT
Use integer constraints.
@ MODEL_SET
Use set constraints.
@ MODEL_MIXED
Use both integer and set constraints.
void parse(int argc, char *argv[])
Parse commandline arguments.
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf=nullptr, FloatVarValPrint vvp=nullptr)
Branch over x with variable selection vars and value selection vals.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
@ IPL_DOM
Domain propagation Options: basic versus advanced propagation.
@ SOT_DUNION
Disjoint union.
Gecode toplevel namespace
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntPropLevel ipl=IPL_DEF)
Post propagator for .
Post propagator for SetVar SetOpType SetVar SetRelType r
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d=1.0, BranchTbl tbl=nullptr)
Select variable with largest accumulated failure count divided by domain size with decay factor d.
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
Select first unassigned variable SetVarBranch SET_VAR_NONE(void)
Select variable with largest degree divided by domain size SetVarBranch SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl=nullptr)
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl=IPL_DEF)
Post propagator for for all .
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
IntVarBranch INT_VAR_AFC_MAX(double d=1.0, BranchTbl tbl=nullptr)
Select variable with largest accumulated failure count with decay factor d.
Select variable with smallest unknown set SetVarBranch SET_VAR_SIZE_MIN(BranchTbl tbl=nullptr)
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl=IPL_DEF)
Post constraint .
Select variable with largest accumulated failure count with decay factor a d SetVarBranch SET_VAR_AFC_MAX(double d=1.0, BranchTbl tbl=nullptr)
Include smallest element SetValBranch SET_VAL_MIN_INC(void)
Select variable with largest accumulated failure count divided by domain size with decay factor a d SetVarBranch SET_VAR_AFC_SIZE_MAX(double d=1.0, BranchTbl tbl=nullptr)
IntVarBranch INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl=nullptr)
Select variable with largest degree divided by domain size.
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl=nullptr)
Select variable with smallest domain size.