13 #ifndef __defined_libdai_dag_h
14 #define __defined_libdai_dag_h
44 std::vector<Neighbors>
_pa;
47 std::vector<Neighbors>
_ch;
66 template<
typename EdgeInputIterator>
67 DAG(
size_t nr, EdgeInputIterator begin, EdgeInputIterator end,
bool check=
true ) :
_pa(),
_ch() {
132 template<
typename EdgeInputIterator>
133 void construct(
size_t nr, EdgeInputIterator begin, EdgeInputIterator end,
bool check=
true );
139 return _pa.size() - 1;
149 template <
typename NodeInputIterator>
150 size_t addNode( NodeInputIterator begin, NodeInputIterator end,
size_t sizeHint=0 ) {
152 newparents.reserve( sizeHint );
154 for( NodeInputIterator it = begin; it != end; ++it ) {
156 Neighbor newparent( iter, *it,
ch(*it).size() );
158 newparents.push_back( newparent );
159 ch( *it ).push_back( newchild );
161 _pa.push_back( newparents );
163 return _pa.size() - 1;
169 DAG&
addEdge(
size_t n1,
size_t n2,
bool check=
true );
192 for(
size_t i = 0; i <
_pa.size(); i++ )
193 sum +=
_pa[i].size();
201 if(
ch(n1).size() <
pa(n2).size() ) {
202 for(
size_t _n2 = 0; _n2 <
ch(n1).size(); _n2++ )
203 if(
ch( n1, _n2 ) == n2 )
206 for(
size_t _n1 = 0; _n1 <
pa(n2).size(); _n1++ )
207 if(
pa( n2, _n1 ) == n1 )
218 for(
size_t _p = 0; _p <
pa(n).size(); _p++ )
219 if(
pa( n, _p ) == p )
221 DAI_THROW(OBJECT_NOT_FOUND);
230 for(
size_t _c = 0; _c <
ch(n).size(); _c++ )
231 if(
ch( n, _c ) == c )
233 DAI_THROW(OBJECT_NOT_FOUND);
244 std::set<size_t>
ancestors(
size_t n )
const;
266 for(
size_t n1 = 0; n1 <
nrNodes(); n1++ ) {
267 if(
pa(n1).size() != x.
pa(n1).size() )
283 void printDot( std::ostream& os )
const;
294 template<
typename EdgeInputIterator>
295 void DAG::construct(
size_t nr, EdgeInputIterator begin, EdgeInputIterator end,
bool check ) {
301 for( EdgeInputIterator e = begin; e != end; e++ )
302 addEdge( e->first, e->second, check );