this repo has no description
1include "global_cardinality_low_up_closed.mzn";
2
3/** @group globals.alldifferent
4 Constrain the array of integers \a vs to be all different except those
5 elements that are assigned the value 0.
6*/
7predicate fzn_alldifferent_except_0(array[int] of var int: vs) =
8 if length(vs)==0 then true
9 else
10 let {
11 int: l = lb_array(vs);
12 int: u = ub_array(vs);
13 } in
14 if l != -infinity /\ u != infinity then
15 global_cardinality_low_up_closed(vs, [i | i in l..u],
16 [0 | i in l..u],
17 [if i==0 then length(vs) else 1 endif | i in l..u]
18 )
19 else
20 forall(i, j in index_set(vs) where i < j) (
21 (vs[i] != 0 /\ vs[j] != 0) -> vs[i] != vs[j]
22 )
23 endif
24 endif;