@@ -599,79 +599,52 @@ void stronglyConnectedMCMgraph(MCMgraph &g,
599
599
* edges are assigned a new id starting in the range [0,nrNodes()).
600
600
*/
601
601
void relabelMCMgraph (MCMgraph &g) {
602
- uint nodeId = 0 ;
603
- uint edgeId = 0 ;
604
602
605
- // Relabel nodes
603
+ std::set<MCMedge*> edgesToRemove;
604
+ std::set<MCMnode*> nodesToRemove;
605
+
606
+ // find nodes to remove
606
607
for (auto &n : g.getNodes ()) {
607
- if (n.visible ) {
608
- n.id = nodeId;
609
- nodeId++;
608
+ if (! n.visible ) {
609
+ nodesToRemove.insert (&n);
610
610
}
611
611
}
612
612
613
- // Relabel edges
613
+ // find edges to remove
614
614
for (auto &e : g.getEdges ()) {
615
- if (e.visible ) {
616
- e.id = edgeId;
617
- edgeId++;
615
+ if (! e.visible ) {
616
+ edgesToRemove.insert (&e);
618
617
}
619
618
}
620
619
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);
650
623
}
651
624
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
+ }
658
629
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++;
661
636
}
662
637
}
663
638
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++;
673
645
}
674
646
}
647
+
675
648
}
676
649
677
650
// Prune the edges in the MCMgraph to maintain only Pareto maximal combinations
0 commit comments