git-subtree-dir: software/minizinc git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
18 lines
601 B
MiniZinc
18 lines
601 B
MiniZinc
include "all_different.mzn";
|
|
|
|
predicate fzn_circuit(array[int] of var int: x) =
|
|
let { set of int: S = index_set(x),
|
|
int: l = min(S),
|
|
int: n = card(S),
|
|
array[S] of var 1..n: order
|
|
} in
|
|
all_different(x) /\
|
|
all_different(order) /\
|
|
forall(i in S)(x[i] != i) /\
|
|
order[l] = 1 /\
|
|
%forall(i in S)(order[i] != n -> order[x[i]] = order[i] + 1) /\
|
|
%forall(i in S)(order[i] == n -> x[i] = l );
|
|
forall(i in S)(order[x[i]] = if order[i] = n then 1 else order[i] + 1 endif);
|
|
|
|
%-----------------------------------------------------------------------------%
|