40#if defined(GECODE_HAS_QT) && defined(GECODE_HAS_GIST)
42#if QT_VERSION >= 0x050000
123 return new Choice(*
this, pos, val);
137 std::ostream& o)
const {
139 o <<
"x[" << c.pos <<
"] "
140 << ((
a == 0) ?
"=" :
"!=")
154 return sizeof(*this);
177 int f(
int x,
int y)
const {
190 static const int moves[8][2] = {
191 {-2,-1}, {-2,1}, {-1,-2}, {-1,2}, {1,-2}, {1,2}, {2,-1}, {2,1}
193 int nbs[8];
int n_nbs = 0;
194 for (
int m=0; m<8; m++) {
195 int nx =
x(i) + moves[m][0], ny =
y(i) + moves[m][1];
196 if ((nx >= 0) && (nx <
n) && (ny >= 0) && (ny <
n))
197 nbs[n_nbs++] =
f(nx,ny);
204 switch (opt.branching()) {
206 branch(*this, succ, INT_VAR_NONE(), INT_VAL_MIN());
208 case BRANCH_WARNSDORFF:
209 Warnsdorff::post(*this, succ);
220 int* jump =
new int[
n*
n];
223 for (
int i=0; i<
n*
n; i++) {
224 jump[j]=i; j=
succ[j].min();
228 for (
int i = 0; i <
n; i++) {
229 for (
int j = 0; j <
n; j++) {
231 os << jump[
f(i,j)] <<
" ";
233 os << std::endl <<
"\t";
259 for (
int i = nn; i--; ) {
261 IntVar j(*
this,0,nn-1); jump[i]=j;
271 for (
int f = 0;
f < nn;
f++) {
275 expr(*
this, (jump[i.val()]-jump[
f] == 1)),
277 expr(*
this, (jump[i.val()]-jump[
f] == 1-nn)),
279 dom(*
this, pred[
f], ds);
311 for (
int f = 0;
f <
n*
n;
f++)
329#if defined(GECODE_HAS_QT) && defined(GECODE_HAS_GIST)
334 QGraphicsScene* scene;
338 static const int unit = 30;
341 KnightsInspector(
void) : scene(NULL), mw(NULL) {}
348 QList <QGraphicsItem*> itemList = scene->items();
349 foreach (QGraphicsItem* i, scene->items()) {
350 scene->removeItem(i);
354 for (
int i=0;
i<k.
n;
i++) {
355 for (
int j=0; j<k.
n; j++) {
356 scene->addRect(i*unit,j*unit,unit,unit);
358 QPen pen(Qt::black, 2);
360 pen.setColor(Qt::red);
361 pen.setStyle(Qt::DotLine);
365 int ky = xv.val() % k.
n;
366 int kx = xv.val() / k.
n;
367 scene->addLine(i*unit+unit/2,j*unit+unit/2,
368 kx*unit+unit/2,ky*unit+unit/2,
378 void initialize(
void) {
379 mw =
new QMainWindow();
380 scene =
new QGraphicsScene();
381 QGraphicsView* view =
new QGraphicsView(scene);
382 view->setRenderHints(QPainter::Antialiasing);
383 mw->setCentralWidget(view);
384 mw->setAttribute(Qt::WA_QuitOnClose,
false);
385 mw->setAttribute(Qt::WA_DeleteOnClose,
false);
386 QAction* closeWindow =
new QAction(
"Close window", mw);
387 closeWindow->setShortcut(QKeySequence(
"Ctrl+W"));
388 mw->connect(closeWindow, SIGNAL(triggered()),
390 mw->addAction(closeWindow);
394 virtual std::string
name(
void) {
return "Board"; }
418#if defined(GECODE_HAS_QT) && defined(GECODE_HAS_GIST)
420 opt.inspect.click(&ki);
423 opt.
parse(argc,argv);
struct Gecode::@603::NNF::@65::@66 b
For binary nodes (and, or, eqv)
int p
Number of positive literals for node type.
int n
Number of negative literals for node type.
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Base-class for both propagators and branchers.
Base-class for branchers.
Choice for performing commit
virtual void archive(Archive &e) const
Archive into e.
Parametric base-class for scripts.
static void run(const Options &opt, Script *s=NULL)
Abstract base class for inspectors.
virtual void inspect(const Space &s)=0
Call-back function.
virtual void finalize(void)
Clean up when Gist exits.
virtual std::string name(void)
Name of the inspector.
Home class for posting propagators
Value iterator for integer sets.
Passing integer variables.
Value iterator for integer variables.
Value iterator for integer views.
int val(void) const
Return current value.
Options for scripts with additional size parameter
bool assigned(void) const
Test if all variables are assigned.
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
void update(Space &home, ViewArray< View > &a)
Update array to be a clone of array a.
int size(void) const
Return size of array (number of elements)
Example: n-Knights tour (model using circuit)
KnightsCircuit(KnightsCircuit &s)
Constructor for cloning s.
KnightsCircuit(const SizeOptions &opt)
virtual Space * copy(void)
Copy during cloning.
Example: n-Knight's tour (simple model)
KnightsReified(const SizeOptions &opt)
virtual Space * copy(void)
Copy during cloning.
KnightsReified(KnightsReified &s)
Constructor for cloning s.
Base-class for knight's tour example.
int main(int argc, char *argv[])
Main-function.
@ PROP_REIFIED
Use reified constraints.
@ PROP_CIRCUIT
Use single circuit constraints.
const int n
Size of board.
int x(int f) const
Return x coordinate at field f.
virtual void print(std::ostream &os) const
Print board.
IntSet neighbors(int i)
Compute set of neighbour fields.
IntVarArray succ
Maps board field to successor field.
Knights(const SizeOptions &opt)
Constructor.
Knights(Knights &s)
Constructor for cloning s.
int f(int x, int y) const
Return field at position x, y.
@ BRANCH_WARNSDORFF
Use Warnsdorff's rule.
@ BRANCH_NAIVE
Use naive, lexicographical branching.
int y(int f) const
Return y coordinate at field f.
void parse(int argc, char *argv[])
Parse commandline arguments.
int pos
Position of variable.
Choice(const Brancher &b, int pos0, int val0)
int val
Value of variable.
virtual void archive(Archive &e) const
Archive into e.
Custom brancher for knight's tours using Warnsdorff's rule.
virtual Actor * copy(Space &home)
Copy brancher.
virtual Gecode::Choice * choice(Space &)
Return choice.
static void post(Home home, const IntVarArgs &x)
Post brancher.
Warnsdorff(Space &home, Warnsdorff &b)
Copy constructor.
ViewArray< Int::IntView > x
Views of the brancher.
virtual size_t dispose(Space &)
Delete brancher and return its size.
virtual ExecStatus commit(Space &home, const Gecode::Choice &_c, unsigned int a)
Perform commit for choice _c and alternative a.
virtual Choice * choice(const Space &, Archive &e)
Return choice.
Warnsdorff(Home home, ViewArray< Int::IntView > &xv)
Construct brancher.
int start
Next variable to branch on.
virtual bool status(const Space &) const
Check status of brancher, return true if alternatives left.
virtual void print(const Space &, const Gecode::Choice &_c, unsigned int a, std::ostream &o) const
Print explanation.
bool me_failed(ModEvent me)
Check whether modification event me is failed.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
Gecode toplevel namespace
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
IntVar expr(Home home, const LinIntExpr &e, const IntPropLevels &ipls=IntPropLevels::def)
Post linear expression and return its value.
void distinct(Home home, const IntVarArgs &x, IntPropLevel ipl=IPL_DEF)
Post propagator for for all .
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Post propagator for SetVar SetOpType SetVar y
@ ES_OK
Execution is okay.
@ ES_FAILED
Execution has resulted in failure.
void circuit(Home home, const IntVarArgs &x, IntPropLevel ipl=IPL_DEF)
Post propagator such that x forms a circuit.
Post propagator for SetVar x
Gecode::IntArgs i({1, 2, 3, 4})