@@ -599,79 +599,52 @@ void stronglyConnectedMCMgraph(MCMgraph &g,
599599 * edges are assigned a new id starting in the range [0,nrNodes()).
600600 */
601601void relabelMCMgraph (MCMgraph &g) {
602- uint nodeId = 0 ;
603- uint edgeId = 0 ;
604602
605- // Relabel nodes
603+ std::set<MCMedge*> edgesToRemove;
604+ std::set<MCMnode*> nodesToRemove;
605+
606+ // find nodes to remove
606607 for (auto &n : g.getNodes ()) {
607- if (n.visible ) {
608- n.id = nodeId;
609- nodeId++;
608+ if (! n.visible ) {
609+ nodesToRemove.insert (&n);
610610 }
611611 }
612612
613- // Relabel edges
613+ // find edges to remove
614614 for (auto &e : g.getEdges ()) {
615- if (e.visible ) {
616- e.id = edgeId;
617- edgeId++;
615+ if (! e.visible ) {
616+ edgesToRemove.insert (&e);
618617 }
619618 }
620619
621- // Remove edges from nodes
622- for (auto &n : g.getNodes ()) {
623- if (!n.visible ) {
624- continue ;
625- }
626-
627- for (auto iterE = n.in .begin (); iterE != n.in .end ();) {
628- auto iterEN = iterE;
629-
630- // Next iterator
631- iterE++;
632-
633- // Erase current iterator?
634- if (!(*iterEN)->visible ) {
635- n.in .erase (iterEN);
636- }
637- }
638-
639- for (auto iterE = n.out .begin (); iterE != n.out .end ();) {
640- auto iterEN = iterE;
641-
642- // Next iterator
643- iterE++;
644-
645- // Erase current iterator?
646- if (!(*iterEN)->visible ) {
647- n.out .erase (iterEN);
648- }
649- }
620+ // remove edges
621+ for (auto *e : edgesToRemove) {
622+ g.removeEdge (*e);
650623 }
651624
652- // Remove nodes from graph
653- for (auto iter = g.getNodes ().begin (); iter != g.getNodes ().end ();) {
654- auto iterN = iter;
655-
656- // Next iterator
657- iter++;
625+ // remove nodes
626+ for (auto *n : nodesToRemove) {
627+ g.removeNode (*n);
628+ }
658629
659- if (!(*iterN).visible ) {
660- g.removeNode (*iterN);
630+ // Relabel nodes
631+ uint nodeId = 0 ;
632+ for (auto &n : g.getNodes ()) {
633+ if (n.visible ) {
634+ n.id = nodeId;
635+ nodeId++;
661636 }
662637 }
663638
664- // Remove edges from graph
665- for (auto iter = g.getEdges ().begin (); iter != g.getEdges ().end ();) {
666- auto iterE = iter;
667-
668- // Next iterator
669- iter++;
670-
671- if (!(*iterE).visible ) {
672- g.removeEdge (*iterE);
639+ // Relabel edges
640+ uint edgeId = 0 ;
641+ for (auto &e : g.getEdges ()) {
642+ if (e.visible ) {
643+ e.id = edgeId;
644+ edgeId++;
673645 }
674646 }
647+
675648}
676649
677650// Prune the edges in the MCMgraph to maintain only Pareto maximal combinations
0 commit comments