48 template < GUM_DiGraphable G >
55 if (visitedUp.
contains(node))
return;
61 for (
const auto par: g.parents(node))
62 _mcsVisitUp_(g, par, soids, minimal, visitedUp, visitedDn);
63 for (
const auto chi: g.children(node))
64 _mcsVisitDn_(g, chi, soids, minimal, visitedUp, visitedDn);
68 template < GUM_DiGraphable G >
75 if (visitedDn.
contains(node))
return;
80 for (
const auto par: g.parents(node))
81 _mcsVisitUp_(g, par, soids, minimal, visitedUp, visitedDn);
83 for (
const auto chi: g.children(node))
84 _mcsVisitDn_(g, chi, soids, minimal, visitedUp, visitedDn);
88 template < GUM_DiGraphable G >
92 NodeSet res, visitedUp, visitedDn;
96 for (
const auto par: g.parents(target))
98 for (
const auto chi: g.children(target))
104 template < GUM_DiGraphable G >
107 for (
const auto node: targets)
bool contains(const Key &k) const
Indicates whether a given elements belong to the set.
Size NodeId
Type for node ids.
Set< NodeId > NodeSet
Some typdefs and define for shortcuts ...
Generic minimal conditioning set algorithm for directed graphs.
void _mcsVisitUp_(const G &g, NodeId node, const NodeSet &soids, NodeSet &minimal, NodeSet &visitedUp, NodeSet &visitedDn)
NodeSet minimalCondSet(const G &g, NodeId target, const NodeSet &soids)
Returns the minimal subset of soids that d-connects target.
void _mcsVisitDn_(const G &g, NodeId node, const NodeSet &soids, NodeSet &minimal, NodeSet &visitedUp, NodeSet &visitedDn)