13 #ifndef __defined_libdai_graph_h
14 #define __defined_libdai_graph_h
87 operator size_t ()
const {
return node; }
100 typedef std::pair<size_t,size_t>
Edge;
117 std::vector<Neighbors>
_nb;
135 template<
typename EdgeInputIterator>
136 GraphAL(
size_t nr, EdgeInputIterator begin, EdgeInputIterator end,
bool check=
true ) :
_nb() {
177 template<
typename EdgeInputIterator>
178 void construct(
size_t nr, EdgeInputIterator begin, EdgeInputIterator end,
bool check=
true );
190 template <
typename NodeInputIterator>
191 size_t addNode( NodeInputIterator begin, NodeInputIterator end,
size_t sizeHint = 0 ) {
193 nbsnew.reserve( sizeHint );
195 for( NodeInputIterator it = begin; it != end; ++it ) {
199 nbsnew.push_back( nb1new );
200 nb( *it ).push_back( nb2new );
202 _nb.push_back( nbsnew );
203 return _nb.size() - 1;
229 for(
size_t i = 0; i <
nrNodes(); i++ )
238 if(
nb(n1).size() <
nb(n2).size() ) {
239 for(
size_t _n2 = 0; _n2 <
nb(n1).size(); _n2++ )
240 if(
nb( n1, _n2 ) == n2 )
243 for(
size_t _n1 = 0; _n1 <
nb(n2).size(); _n1++ )
244 if(
nb( n2, _n1 ) == n1 )
255 for(
size_t _n2 = 0; _n2 <
nb(n1).size(); _n2++ )
256 if(
nb( n1, _n2 ) == n2 )
258 DAI_THROW(OBJECT_NOT_FOUND);
259 return nb(n1).size();
282 for(
size_t n1 = 0; n1 <
nrNodes(); n1++ ) {
283 if(
nb(n1).size() != x.
nb(n1).size() )
299 void printDot( std::ostream& os )
const;
310 template<
typename EdgeInputIterator>
315 for( EdgeInputIterator e = begin; e != end; e++ )
316 addEdge( e->first, e->second, check );