46 for (MapNodesById::const_iterator it=
_nodes.begin();
53 for (MapArcsById::const_iterator it=
_arcs.begin();
57 Arc * arc = it->second;
62 #undef CHECK_INTEGRITY
68 for (MapNodesById::const_iterator it=__G.
_nodes.begin();
72 Node * copy =
new Node(*it->second,
this);
73 _nodes [ it->first ] = copy;
76 for (MapArcsById::const_iterator it=__G.
_arcs.begin();
80 Arc * copy =
new Arc(*it->second,
this);
81 _arcs [ it->first ] = copy;
82 for (Arc::MultimapNodesById::const_iterator it2=copy->
Nodes().begin();
83 it2 != copy->
Nodes().end(); it2++)
85 it2->second->
Add(copy);
93 for (std::set <Node*>::const_iterator it=__nodes.begin();
102 for (MapArcsById::const_iterator it=__G.
_arcs.begin();
106 std::vector <int> nodesIds;
108 Arc * arc = it->second;
109 for (Arc::MultimapNodesById::const_iterator it2=arc->
Nodes().begin();
110 it2 != arc->
Nodes().end(); it2++)
114 nodesIds.push_back(it2->first);
118 if (nodesIds.size() > 0)
130 for (std::vector <Node*>::const_iterator it=__nodes.begin();
139 for (MapArcsById::const_iterator it=__G.
_arcs.begin();
143 std::vector <int> nodesIds;
145 Arc * arc = it->second;
146 for (Arc::MultimapNodesById::const_iterator it2=arc->
Nodes().begin();
147 it2 != arc->
Nodes().end(); it2++)
151 nodesIds.push_back(it2->first);
155 if (nodesIds.size() > 1)
177 MapNodesById::const_iterator it =
_nodes.find ( __id );
190 MapArcsById::const_iterator it =
_arcs.find ( __id );
191 if (it !=
_arcs.end() )
203 MapNodesById::iterator it =
_nodes.find ( __node->
Id() );
207 for (Node::MultimapArcsById::iterator itArcs = __node->
IncidentArcs().begin();
211 itArcs->second->Remove(__node);
219 std::cout <<
"Error: Graph::RemoveNode ( "<<__node->
Id()<<
" )"<<std::endl;
220 std::cout <<
"\t the node was not found !\n"<<__node->
Id()<<
" )"<<std::endl;
223 #ifdef CHECK_INTEGRITY
231 MapNodesById::iterator it =
_nodes.find ( __id );
234 Node * n = it->second;
239 std::cout <<
"Error: Graph::RemoveNode ( "<<__id<<
" )"<<std::endl;
240 std::cout <<
"\t the node was not found !\n"<<__id<<
" )"<<std::endl;
252 MapArcsById::iterator it =
_arcs.find ( __id );
253 if (it !=
_arcs.end())
255 Arc * tempArc = it->second;
257 for (Arc::MultimapNodesById::const_iterator it2=tempArc->
Nodes().begin();
258 it2!=tempArc->
Nodes().end();it2++)
260 it2->second->
Remove(__id);
270 std::cout <<
"Error: Graph::RemoveArc ( "<<__id<<
" )"<<std::endl;
271 std::cout <<
"\t the arc was not found !\n"<<__id<<
" )"<<std::endl;
326 return std::max_element(
_arcs.begin(),
_arcs.end())->first;
331 return std::max_element(
_nodes.begin(),
_nodes.end())->first;
340 Arc *
a =
new Arc (
this, __id);
344 va_start(argp, __rank);
346 for (
int i=0;i<__rank;i++)
348 int nodeId = va_arg(argp,
int);
363 Arc *
a =
new Arc (
this, __id);
366 for (Arc::MultimapNodesById::const_iterator itNodes = __nodes.begin();
367 itNodes != __nodes.end();
370 Node * n = itNodes->second;
383 Arc *
a =
new Arc (
this, __id);
386 for (
unsigned int i=0;i<__nodeIds.size();i++)
388 int nodeId = __nodeIds[i];
425 for (Node::MultimapArcsById::const_iterator it = __A->
IncidentArcs().begin();
429 incidentArcs.insert(std::pair<int,Arc*>(it->first,it->second));
432 for (Node::MultimapArcsById::iterator it = __B->
IncidentArcs().begin();
436 incidentArcs.insert(std::pair<int,Arc*>(it->first,it->second));
447 for (Node::MultimapArcsById::iterator it = incidentArcs.begin();
448 it != incidentArcs.end();
461 for (HypergraphLib::Graph::MapNodesById::const_iterator it=
GetNodes().begin();
464 for (HypergraphLib::Node::MultimapArcsById::const_iterator it2=it->second->IncidentArcs().begin();
465 it2!=it->second->IncidentArcs().end();it2++)
467 int id=it2->second->Id();
469 if (arcInGraph != it2->second)
470 std::cerr <<
"Error: The incident Arc "<<
id<<
" of node "<<it->second->Id()<<
"is not referenced in the graph"<<std::endl;
475 for (HypergraphLib::Graph::MapArcsById::const_iterator it=
GetArcs().begin();
478 for (HypergraphLib::Arc::MultimapNodesById::const_iterator it2=it->second->Nodes().begin();
479 it2!=it->second->Nodes().end();it2++)
481 int id=it2->second->Id();
483 if (nodeInGraph != it2->second)
484 std::cerr <<
"Error: The Node "<<
id<<
" of arc "<<it->first<<
"is not referenced in the graph"<<std::endl;
489 for (HypergraphLib::Graph::MapNodesById::const_iterator it=
GetNodes().begin();
492 for (HypergraphLib::Node::MultimapArcsById::const_iterator it2=it->second->IncidentArcs().begin();
493 it2!=it->second->IncidentArcs().end();it2++)
495 int nodeC=it2->second->NodeCount(it->first);
496 int arcC=it->second->ArcCount(it2->first);
499 std::cerr <<
"Error: the Arc->NodeCount("<<it->first<<
")="<<nodeC<<
""<<std::endl;
500 std::cerr <<
"is not equal to the Node->ArcCount("<<it2->first<<
")="<<arcC<<
""<<std::endl;
507 for (HypergraphLib::Graph::MapArcsById::const_iterator it2=
GetArcs().begin();
510 for (HypergraphLib::Arc::MultimapNodesById::const_iterator it=it2->second->Nodes().begin();
511 it!=it2->second->Nodes().end();it++)
513 int nodeC=it2->second->NodeCount(it->first);
514 int arcC=it->second->ArcCount(it2->first);
517 std::cerr <<
"Error: the Arc->NodeCount("<<it->first<<
")="<<nodeC<<
""<<std::endl;
518 std::cerr <<
"is not equal to the Node->ArcCount("<<it2->first<<
")="<<arcC<<
""<<std::endl;
528 for (HypergraphLib::Graph::MapArcsById::const_iterator it2=
GetArcs().begin();
530 if (it2->second->Rank() != 2)
538 if (__nodes.size () < 2 )
return false;
542 const unsigned N = __nodes.size();
544 for (
unsigned i=0; i<N; i++)
546 Node * n = __nodes[i];
548 int i_previous = i-1;
549 if (i_previous < 0) i_previous += N;
550 Node *n_previous = __nodes[i_previous];
551 int i_next = (i+1)%N;
552 Node *n_next = __nodes[i_next];
557 if ( arc1 && arc2 && arc1 != arc2 )
559 if (n_next == n_previous)