COIN-OR::LEMON - Graph Library

Ignore:
Location:
lemon
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • lemon/matching.h

    r949 r954  
    811811        _matching = new MatchingMap(_graph);
    812812      }
     813
    813814      if (!_node_potential) {
    814815        _node_potential = new NodePotential(_graph);
    815816      }
     817
    816818      if (!_blossom_set) {
    817819        _blossom_index = new IntNodeMap(_graph);
    818820        _blossom_set = new BlossomSet(*_blossom_index);
    819821        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
     822      } else if (_blossom_data->size() != _blossom_num) {
     823        delete _blossom_data;
     824        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
    820825      }
    821826
     
    824829        _node_heap_index = new IntArcMap(_graph);
    825830        _node_data = new RangeMap<NodeData>(_node_num,
    826                                               NodeData(*_node_heap_index));
     831                                            NodeData(*_node_heap_index));
     832      } else {
     833        delete _node_data;
     834        _node_data = new RangeMap<NodeData>(_node_num,
     835                                            NodeData(*_node_heap_index));
    827836      }
    828837
     
    830839        _tree_set_index = new IntIntMap(_blossom_num);
    831840        _tree_set = new TreeSet(*_tree_set_index);
    832       }
     841      } else {
     842        _tree_set_index->resize(_blossom_num);
     843      }
     844
    833845      if (!_delta1) {
    834846        _delta1_index = new IntNodeMap(_graph);
    835847        _delta1 = new BinHeap<Value, IntNodeMap>(*_delta1_index);
    836848      }
     849
    837850      if (!_delta2) {
    838851        _delta2_index = new IntIntMap(_blossom_num);
    839852        _delta2 = new BinHeap<Value, IntIntMap>(*_delta2_index);
    840       }
     853      } else {
     854        _delta2_index->resize(_blossom_num);
     855      }
     856
    841857      if (!_delta3) {
    842858        _delta3_index = new IntEdgeMap(_graph);
    843859        _delta3 = new BinHeap<Value, IntEdgeMap>(*_delta3_index);
    844860      }
     861
    845862      if (!_delta4) {
    846863        _delta4_index = new IntIntMap(_blossom_num);
    847864        _delta4 = new BinHeap<Value, IntIntMap>(*_delta4_index);
     865      } else {
     866        _delta4_index->resize(_blossom_num);
    848867      }
    849868    }
     
    15891608      createStructures();
    15901609
     1610      _blossom_node_list.clear();
     1611      _blossom_potential.clear();
     1612
    15911613      for (ArcIt e(_graph); e != INVALID; ++e) {
    15921614        (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP;
     
    16021624        (*_delta4_index)[i] = _delta4->PRE_HEAP;
    16031625      }
    1604 
     1626     
    16051627      _unmatched = _node_num;
     1628
     1629      _delta1->clear();
     1630      _delta2->clear();
     1631      _delta3->clear();
     1632      _delta4->clear();
     1633      _blossom_set->clear();
     1634      _tree_set->clear();
    16061635
    16071636      int index = 0;
     
    16151644        }
    16161645        (*_node_index)[n] = index;
     1646        (*_node_data)[index].heap_index.clear();
     1647        (*_node_data)[index].heap.clear();
    16171648        (*_node_data)[index].pot = max;
    16181649        _delta1->push(n, max);
     
    22382269        _matching = new MatchingMap(_graph);
    22392270      }
     2271
    22402272      if (!_node_potential) {
    22412273        _node_potential = new NodePotential(_graph);
    22422274      }
     2275
    22432276      if (!_blossom_set) {
    22442277        _blossom_index = new IntNodeMap(_graph);
    22452278        _blossom_set = new BlossomSet(*_blossom_index);
     2279        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
     2280      } else if (_blossom_data->size() != _blossom_num) {
     2281        delete _blossom_data;
    22462282        _blossom_data = new RangeMap<BlossomData>(_blossom_num);
    22472283      }
     
    22522288        _node_data = new RangeMap<NodeData>(_node_num,
    22532289                                            NodeData(*_node_heap_index));
     2290      } else if (_node_data->size() != _node_num) {
     2291        delete _node_data;
     2292        _node_data = new RangeMap<NodeData>(_node_num,
     2293                                            NodeData(*_node_heap_index));
    22542294      }
    22552295
     
    22572297        _tree_set_index = new IntIntMap(_blossom_num);
    22582298        _tree_set = new TreeSet(*_tree_set_index);
    2259       }
     2299      } else {
     2300        _tree_set_index->resize(_blossom_num);
     2301      }
     2302
    22602303      if (!_delta2) {
    22612304        _delta2_index = new IntIntMap(_blossom_num);
    22622305        _delta2 = new BinHeap<Value, IntIntMap>(*_delta2_index);
    2263       }
     2306      } else {
     2307        _delta2_index->resize(_blossom_num);
     2308      }
     2309
    22642310      if (!_delta3) {
    22652311        _delta3_index = new IntEdgeMap(_graph);
    22662312        _delta3 = new BinHeap<Value, IntEdgeMap>(*_delta3_index);
    22672313      }
     2314
    22682315      if (!_delta4) {
    22692316        _delta4_index = new IntIntMap(_blossom_num);
    22702317        _delta4 = new BinHeap<Value, IntIntMap>(*_delta4_index);
     2318      } else {
     2319        _delta4_index->resize(_blossom_num);
    22712320      }
    22722321    }
     
    29693018      createStructures();
    29703019
     3020      _blossom_node_list.clear();
     3021      _blossom_potential.clear();
     3022
    29713023      for (ArcIt e(_graph); e != INVALID; ++e) {
    29723024        (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP;
     
    29813033
    29823034      _unmatched = _node_num;
     3035
     3036      _delta2->clear();
     3037      _delta3->clear();
     3038      _delta4->clear();
     3039      _blossom_set->clear();
     3040      _tree_set->clear();
    29833041
    29843042      int index = 0;
     
    29923050        }
    29933051        (*_node_index)[n] = index;
     3052        (*_node_data)[index].heap_index.clear();
     3053        (*_node_data)[index].heap.clear();
    29943054        (*_node_data)[index].pot = max;
    29953055        int blossom =
  • lemon/unionfind.h

    r864 r954  
    12891289        first_free_class(-1), first_free_node(-1) {}
    12901290
     1291    /// \brief Clears the union-find data structure
     1292    ///
     1293    /// Erase each item from the data structure.
     1294    void clear() {
     1295      nodes.clear();
     1296      classes.clear();
     1297      first_free_node = first_free_class = first_class = -1;
     1298    }
     1299
    12911300    /// \brief Insert a new node into a new component.
    12921301    ///
Note: See TracChangeset for help on using the changeset viewer.