COIN-OR::LEMON - Graph Library

Ticket #3: 3fe3c838a89e.patch

File 3fe3c838a89e.patch, 3.2 KB (added by Peter Kovacs, 12 years ago)
  • lemon/list_graph.h

    # HG changeset patch
    # User Peter Kovacs <kpeter@inf.elte.hu>
    # Date 1226058174 -3600
    # Node ID 3fe3c838a89e4cbaf1168b4f0720839bde2f44ce
    # Parent  164fe3abc0249a97d773f6cfa7fd0d3c623b88a9
    Constant time item counting for ListDigraph and ListGraph (#3)
    
    diff --git a/lemon/list_graph.h b/lemon/list_graph.h
    a b  
    5656
    5757    int first_free_arc;
    5858
     59    int node_num, arc_num;
     60
    5961  public:
    6062
    6163    typedef ListDigraphBase Digraph;
     
    9193    };
    9294
    9395
     96    ListDigraphBase()
     97      : nodes(), first_node(-1), first_free_node(-1),
     98        arcs(), first_free_arc(-1),
     99        node_num(0), arc_num(0) {}
    94100
    95     ListDigraphBase()
    96       : nodes(), first_node(-1),
    97         first_free_node(-1), arcs(), first_free_arc(-1) {}
    98101
     102    typedef True NodeNumTag;
     103    typedef True ArcNumTag;
     104
     105    int nodeNum() const { return node_num; }
     106    int arcNum() const { return arc_num; }
    99107
    100108    int maxNodeId() const { return nodes.size()-1; }
    101109    int maxArcId() const { return arcs.size()-1; }
     
    182190
    183191      nodes[n].first_in = nodes[n].first_out = -1;
    184192
     193      ++node_num;
     194
    185195      return Node(n);
    186196    }
    187197
     
    213223
    214224      nodes[u.id].first_out = nodes[v.id].first_in = n;
    215225
     226      ++arc_num;
     227
    216228      return Arc(n);
    217229    }
    218230
     
    233245      first_free_node = n;
    234246      nodes[n].prev = -2;
    235247
     248      --node_num;
    236249    }
    237250
    238251    void erase(const Arc& arc) {
     
    262275      arcs[n].next_in = first_free_arc;
    263276      first_free_arc = n;
    264277      arcs[n].prev_in = -2;
     278
     279      --arc_num;
    265280    }
    266281
    267282    void clear() {
    268283      arcs.clear();
    269284      nodes.clear();
    270285      first_node = first_free_node = first_free_arc = -1;
     286      node_num = arc_num = 0;
    271287    }
    272288
    273289  protected:
     
    794810
    795811    int first_free_arc;
    796812
     813    int node_num, edge_num;
     814
    797815  public:
    798816
    799817    typedef ListGraphBase Digraph;
     
    855873
    856874    ListGraphBase()
    857875      : nodes(), first_node(-1),
    858         first_free_node(-1), arcs(), first_free_arc(-1) {}
     876        first_free_node(-1), arcs(), first_free_arc(-1),
     877        node_num(0), edge_num(0) {}
    859878
     879
     880    typedef True NodeNumTag;
     881    typedef True EdgeNumTag;
     882    typedef True ArcNumTag;
     883
     884    int nodeNum() const { return node_num; }
     885    int edgeNum() const { return edge_num; }
     886    int arcNum() const { return edge_num * 2; }
    860887
    861888    int maxNodeId() const { return nodes.size()-1; }
    862889    int maxEdgeId() const { return arcs.size() / 2 - 1; }
     
    10231050
    10241051      nodes[n].first_out = -1;
    10251052
     1053      ++node_num;
     1054
    10261055      return Node(n);
    10271056    }
    10281057
     
    10551084      arcs[n | 1].prev_out = -1;
    10561085      nodes[u.id].first_out = (n | 1);
    10571086
     1087      ++edge_num;
     1088
    10581089      return Edge(n / 2);
    10591090    }
    10601091
     
    10741105      nodes[n].next = first_free_node;
    10751106      first_free_node = n;
    10761107      nodes[n].prev = -2;
     1108
     1109      --node_num;
    10771110    }
    10781111
    10791112    void erase(const Edge& edge) {
     
    11041137      arcs[n].prev_out = -2;
    11051138      arcs[n | 1].prev_out = -2;
    11061139
     1140      --edge_num;
    11071141    }
    11081142
    11091143    void clear() {
    11101144      arcs.clear();
    11111145      nodes.clear();
    11121146      first_node = first_free_node = first_free_arc = -1;
     1147      node_num = edge_num = 0;
    11131148    }
    11141149
    11151150  protected: