133 typedef std::vector<NodeP> VectorNodeP;
134 typedef std::vector<EdgeP> VectorEdgeP;
135 typedef std::map<NodeP, NodeP> MapNodes;
136 typedef std::vector<bool> EdgeIncidence;
153 uint getNumberOfConnectedComponents();
160 auto edgeIT = std::find_if(pEdgesList.begin(),
162 [&u, &v](
const EdgeP& edgeP) ->
bool
164 if (edgeP->getOrigin()->getName() == u
165 && edgeP->getDestination()->getName() == v)
169 if (edgeP->getDestination()->getName() == u
170 && edgeP->getOrigin()->getName() == v)
179 if (edgeIT != pEdgesList.end())
187 EdgeP findDrivingEdgeFromNodeNames(std::string u, std::string v)
189 auto edgeIT = std::find_if(pMinSpanningTree.begin(),
190 pMinSpanningTree.end(),
191 [&u, &v](
const EdgeP& edgeP) ->
bool
193 if (edgeP->getOrigin()->getName() == u
194 && edgeP->getDestination()->getName() == v)
198 if (edgeP->getDestination()->getName() == u
199 && edgeP->getOrigin()->getName() == v)
208 if (edgeIT != pMinSpanningTree.end())
217 void removeEdge(EdgeP e)
219 auto edgeIT = std::find(pEdgesList.begin(), pEdgesList.end(), e);
221 if (edgeIT != pEdgesList.end())
223 pEdgesList.erase(edgeIT);
225 adjency[e->getOrigin()].erase(e->getDestination());
226 adjency[e->getDestination()].erase(e->getOrigin());
235 auto nodeIT = std::find_if(pNodesList.begin(),
237 [&name](
NodeP& n) ->
bool { return n->getName() == name; });
238 if (nodeIT != pNodesList.end())
285 return meshIndexMatrix;
288 VectorEdgeP twoLevelPath(VectorNodeP vN);
294 bool getDuplicatedGrid(
Grid&);
300 bool cloneGrid(
Grid&);
302 const VectorEdgeP& getEdges()
308 EdgeIncidence getIncidenceVector(VectorEdgeP vE)
310 EdgeIncidence Ei(pEdgesList.size(),
false);
311 for (uint i = 0; i < pEdgesList.size(); i++)
313 if (std::find(vE.begin(), vE.end(), pEdgesList[i]) != vE.end())
321 EdgeIncidence getIncidenceVector(EdgeP vE)
323 EdgeIncidence Ei(pEdgesList.size(),
false);
324 for (uint i = 0; i < pEdgesList.size(); i++)
326 if (vE == pEdgesList[i])
335 VectorEdgeP getEdgeVectorFromIncidence(EdgeIncidence vI)
338 for (uint i = 0; i < pEdgesList.size(); i++)
342 vE.push_back(pEdgesList[i]);
348 EdgeIncidence incidenceXOR(EdgeIncidence& e1, EdgeIncidence& e2)
350 EdgeIncidence Ei(e1.size(),
false);
351 std::transform(e1.begin(), e1.end(), e2.begin(), Ei.begin(), std::bit_xor<bool>());
356 int incidenceInnerProduct(EdgeIncidence& e1, EdgeIncidence& e2)
358 int r1 = std::inner_product(e1.begin(), e1.end(), e2.begin(), 0);
364 for (
auto it = pNodesList.begin(); it != pNodesList.end(); it++)
370 for (
auto it = pEdgesList.begin(); it != pEdgesList.end(); it++)
376 pMinSpanningTree.clear();
378 meshIndexMatrix.clear();
386 VectorNodeP pNodesList;
388 VectorEdgeP pEdgesList;
392 VectorEdgeP pMinSpanningTree;
394 std::vector<VectorEdgeP> pMesh;
396 std::vector<std::vector<int>> meshIndexMatrix;
401 std::map<NodeP, std::map<NodeP, EdgeP>> adjency;