1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.
Jip J. Dekker f2a1c4e389 Squashed 'software/mza/' content from commit f970a59b17
git-subtree-dir: software/mza
git-subtree-split: f970a59b177c13ca3dd8aaef8cc6681d83b7e813
2021-07-11 16:34:30 +10:00

16 lines
627 B
MiniZinc

predicate fzn_dag(array[int] of $$N: from, array[int] of $$N: to,
array[$$N] of var bool: ns, array[int] of var bool: es) =
let {
set of int: EDGE = index_set(es);
array[index_set(ns)] of var 0..length(ns)-1: dist; /* distance of longest path */
} in
forall(n in index_set(ns))(not ns[n] -> dist[n] = 0) /\
forall(e in EDGE)
(es[e] -> dist[from[e]] + 1 <= dist[to[e]])
/\
% redundant constraint to ensure all distances are fixed
forall(n in index_set(ns))
(dist[n] = max( [0] ++ [ (dist[from[e]] + 1)*es[e] | e in EDGE where to[e] = n ]))
;