this repo has no description
at develop 801 B view raw
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;