Changeset 945:5b926cc36a4b in lemon
- Timestamp:
- 03/16/10 21:12:10 (15 years ago)
- Branch:
- default
- Children:
- 946:1248d23d6e93, 954:07ec2b52e53d, 965:ece1f8a3052d, 976:5205145fabf6
- Phase:
- public
- Location:
- lemon
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/matching.h
r698 r945 806 806 _matching = new MatchingMap(_graph); 807 807 } 808 808 809 if (!_node_potential) { 809 810 _node_potential = new NodePotential(_graph); 810 811 } 812 811 813 if (!_blossom_set) { 812 814 _blossom_index = new IntNodeMap(_graph); 813 815 _blossom_set = new BlossomSet(*_blossom_index); 814 816 _blossom_data = new RangeMap<BlossomData>(_blossom_num); 817 } else if (_blossom_data->size() != _blossom_num) { 818 delete _blossom_data; 819 _blossom_data = new RangeMap<BlossomData>(_blossom_num); 815 820 } 816 821 … … 819 824 _node_heap_index = new IntArcMap(_graph); 820 825 _node_data = new RangeMap<NodeData>(_node_num, 821 NodeData(*_node_heap_index)); 826 NodeData(*_node_heap_index)); 827 } else { 828 delete _node_data; 829 _node_data = new RangeMap<NodeData>(_node_num, 830 NodeData(*_node_heap_index)); 822 831 } 823 832 … … 825 834 _tree_set_index = new IntIntMap(_blossom_num); 826 835 _tree_set = new TreeSet(*_tree_set_index); 827 } 836 } else { 837 _tree_set_index->resize(_blossom_num); 838 } 839 828 840 if (!_delta1) { 829 841 _delta1_index = new IntNodeMap(_graph); 830 842 _delta1 = new BinHeap<Value, IntNodeMap>(*_delta1_index); 831 843 } 844 832 845 if (!_delta2) { 833 846 _delta2_index = new IntIntMap(_blossom_num); 834 847 _delta2 = new BinHeap<Value, IntIntMap>(*_delta2_index); 835 } 848 } else { 849 _delta2_index->resize(_blossom_num); 850 } 851 836 852 if (!_delta3) { 837 853 _delta3_index = new IntEdgeMap(_graph); 838 854 _delta3 = new BinHeap<Value, IntEdgeMap>(*_delta3_index); 839 855 } 856 840 857 if (!_delta4) { 841 858 _delta4_index = new IntIntMap(_blossom_num); 842 859 _delta4 = new BinHeap<Value, IntIntMap>(*_delta4_index); 860 } else { 861 _delta4_index->resize(_blossom_num); 843 862 } 844 863 } … … 1686 1705 createStructures(); 1687 1706 1707 _blossom_node_list.clear(); 1708 _blossom_potential.clear(); 1709 1688 1710 for (ArcIt e(_graph); e != INVALID; ++e) { 1689 1711 (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP; … … 1699 1721 (*_delta4_index)[i] = _delta4->PRE_HEAP; 1700 1722 } 1723 1724 _delta1->clear(); 1725 _delta2->clear(); 1726 _delta3->clear(); 1727 _delta4->clear(); 1728 _blossom_set->clear(); 1729 _tree_set->clear(); 1701 1730 1702 1731 int index = 0; … … 1710 1739 } 1711 1740 (*_node_index)[n] = index; 1741 (*_node_data)[index].heap_index.clear(); 1742 (*_node_data)[index].heap.clear(); 1712 1743 (*_node_data)[index].pot = max; 1713 1744 _delta1->push(n, max); … … 2199 2230 _matching = new MatchingMap(_graph); 2200 2231 } 2232 2201 2233 if (!_node_potential) { 2202 2234 _node_potential = new NodePotential(_graph); 2203 2235 } 2236 2204 2237 if (!_blossom_set) { 2205 2238 _blossom_index = new IntNodeMap(_graph); 2206 2239 _blossom_set = new BlossomSet(*_blossom_index); 2240 _blossom_data = new RangeMap<BlossomData>(_blossom_num); 2241 } else if (_blossom_data->size() != _blossom_num) { 2242 delete _blossom_data; 2207 2243 _blossom_data = new RangeMap<BlossomData>(_blossom_num); 2208 2244 } … … 2213 2249 _node_data = new RangeMap<NodeData>(_node_num, 2214 2250 NodeData(*_node_heap_index)); 2251 } else if (_node_data->size() != _node_num) { 2252 delete _node_data; 2253 _node_data = new RangeMap<NodeData>(_node_num, 2254 NodeData(*_node_heap_index)); 2215 2255 } 2216 2256 … … 2218 2258 _tree_set_index = new IntIntMap(_blossom_num); 2219 2259 _tree_set = new TreeSet(*_tree_set_index); 2220 } 2260 } else { 2261 _tree_set_index->resize(_blossom_num); 2262 } 2263 2221 2264 if (!_delta2) { 2222 2265 _delta2_index = new IntIntMap(_blossom_num); 2223 2266 _delta2 = new BinHeap<Value, IntIntMap>(*_delta2_index); 2224 } 2267 } else { 2268 _delta2_index->resize(_blossom_num); 2269 } 2270 2225 2271 if (!_delta3) { 2226 2272 _delta3_index = new IntEdgeMap(_graph); 2227 2273 _delta3 = new BinHeap<Value, IntEdgeMap>(*_delta3_index); 2228 2274 } 2275 2229 2276 if (!_delta4) { 2230 2277 _delta4_index = new IntIntMap(_blossom_num); 2231 2278 _delta4 = new BinHeap<Value, IntIntMap>(*_delta4_index); 2279 } else { 2280 _delta4_index->resize(_blossom_num); 2232 2281 } 2233 2282 } … … 2927 2976 createStructures(); 2928 2977 2978 _blossom_node_list.clear(); 2979 _blossom_potential.clear(); 2980 2929 2981 for (ArcIt e(_graph); e != INVALID; ++e) { 2930 2982 (*_node_heap_index)[e] = BinHeap<Value, IntArcMap>::PRE_HEAP; … … 2937 2989 (*_delta4_index)[i] = _delta4->PRE_HEAP; 2938 2990 } 2991 2992 _delta2->clear(); 2993 _delta3->clear(); 2994 _delta4->clear(); 2995 _blossom_set->clear(); 2996 _tree_set->clear(); 2939 2997 2940 2998 int index = 0; … … 2948 3006 } 2949 3007 (*_node_index)[n] = index; 3008 (*_node_data)[index].heap_index.clear(); 3009 (*_node_data)[index].heap.clear(); 2950 3010 (*_node_data)[index].pot = max; 2951 3011 int blossom = -
lemon/unionfind.h
r606 r945 740 740 void clear() { 741 741 items.clear(); 742 classes.clear ;742 classes.clear(); 743 743 firstClass = firstFreeClass = firstFreeItem = -1; 744 744 } … … 1289 1289 first_free_class(-1), first_free_node(-1) {} 1290 1290 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 1291 1300 /// \brief Insert a new node into a new component. 1292 1301 ///
Note: See TracChangeset
for help on using the changeset viewer.