42 #ifdef GECODE_HAS_SET_VARS
50 using namespace Gecode;
60 #ifdef GECODE_HAS_SET_VARS
80 n(example_size(examples[
opt.
size()])) {}
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++)
126 if (
int v = sudokuField(examples[
opt.size()], nn,
i, j))
129 #ifdef GECODE_HAS_SET_VARS
130 if (
opt.propagation() == PROP_SAME) {
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);
168 if (
opt.branching() == BRANCH_NONE) {
170 }
else if (
opt.branching() == BRANCH_SIZE) {
172 }
else if (
opt.branching() == BRANCH_SIZE_DEGREE) {
174 }
else if (
opt.branching() == BRANCH_SIZE_AFC) {
176 }
else if (
opt.branching() == BRANCH_AFC) {
183 x.update(*
this, s.
x);
196 for (
int i = 0;
i<
n*
n*
n*
n;
i++) {
201 os << (char)(
x[
i].val()+
'A'-10) <<
" ";
206 os << std::endl <<
" ";
211 #ifdef GECODE_HAS_SET_VARS
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++) {
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;
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++)
302 if (
int idx = sudokuField(examples[
opt.size()], nn,
i, j))
305 if (
opt.branching() == BRANCH_NONE) {
307 }
else if (
opt.branching() == BRANCH_SIZE) {
309 }
else if (
opt.branching() == BRANCH_SIZE_DEGREE) {
311 }
else if (
opt.branching() == BRANCH_SIZE_AFC) {
313 }
else if (
opt.branching() == BRANCH_AFC) {
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");
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
436 Script::run<SudokuInt,DFS,SizeOptions>(
opt);
439 Script::run<SudokuSet,DFS,SizeOptions>(
opt);
442 Script::run<SudokuMixed,DFS,SizeOptions>(
opt);
446 Script::run<SudokuInt,DFS,SizeOptions>(
opt);
void values(Home home, const IntVarArgs &x, IntSet y, IntPropLevel ipl)
Post constraint .
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
union Gecode::@602::NNF::@65 u
Union depending on nodetype t.
int n
Number of negative literals for node type.
Node * x
Pointer to corresponding Boolean expression node.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
Parametric base-class for scripts.
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.
void propagation(int v)
Set default propagation value.
void branching(int v)
Set default branching value.
void solutions(unsigned int n)
Set default number of solutions to search for.
void ipl(IntPropLevel i)
Set default integer propagation level.
void model(int v)
Set default model value.
Options for scripts with additional size parameter
void update(Space &home, VarImpVar< VarImp > &y)
Update this variable to be a clone of variable y.
Example: Solving Sudoku puzzles using integer constraints
SudokuInt(const SizeOptions &opt)
Constructor.
virtual Space * copy(void)
Perform copying during cloning.
@ 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
virtual Space * copy(void)
Perform copying during cloning.
SetVarArray y
The fields occupied by a certain number.
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.
Sudoku(const SizeOptions &opt)
Constructor.
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 channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntPropLevel)
Post propagator for .
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl)
Post propagator for for all .
Post propagator for SetVar SetOpType SetVar y
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
@ IPL_DOM
Domain propagation Options: basic versus advanced propagation.
@ SOT_DUNION
Disjoint union.
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d.
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
IntVarBranch INT_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
IntVarBranch INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest domain size.
bool same(VarArgArray< Var > x, VarArgArray< Var > y)
bool assigned(View x, int v)
Whether x is assigned to value v.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Gecode::IntArgs i({1, 2, 3, 4})
SetValBranch SET_VAL_MIN_INC(void)
SetVarBranch SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
SetVarBranch SET_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
SetVarBranch SET_VAR_AFC_MAX(double d, BranchTbl tbl)
SetVarBranch SET_VAR_NONE(void)
SetVarBranch SET_VAR_SIZE_MIN(BranchTbl tbl)