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.
on-restart-benchmarks/share/minizinc/std/fzn_reachable_enum_reif.mzn
Jip J. Dekker fad1b07018 Squashed 'software/minizinc/' content from commit 4f10c8205
git-subtree-dir: software/minizinc
git-subtree-split: 4f10c82056ffcb1041d7ffef29d77a7eef92cf76
2021-06-16 14:06:46 +10:00

17 lines
786 B
MiniZinc

predicate fzn_reachable_reif(array[int] of $$N: from, array[int] of $$N: to,
var $$N: r, array[$$N] of var bool: ns, array[int] of var bool: es,
var bool: b) =
let {
int: E = length(es);
set of int: NODE = min(index_set(ns))..max(index_set(ns));
array[1..2*E] of NODE: dfrom = from ++ to;
array[1..2*E] of NODE: dto = to ++ from;
array[1..2*E] of var bool: des = es ++ es;
array[NODE] of var bool: dns = array1d(NODE,ns);
var NODE: dr = r;
} in
/* duplicate the edges so that we can use directed graph reachability */
b <-> fzn_dreachable(dfrom,dto,dr,dns,des);
%-----------------------------------------------------------------------------%