Changes in lemon/preflow.h [688:756a5ec551c8:1027:30d5f950aa5f] in lemon
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/preflow.h
r688 r1027 375 375 /// 376 376 /// Sets the tolerance used by algorithm. 377 Preflow& tolerance(const Tolerance& tolerance) const{377 Preflow& tolerance(const Tolerance& tolerance) { 378 378 _tolerance = tolerance; 379 379 return *this; … … 384 384 /// Returns a const reference to the tolerance. 385 385 const Tolerance& tolerance() const { 386 return tolerance;386 return _tolerance; 387 387 } 388 388 … … 526 526 _flow->set(e, (*_capacity)[e]); 527 527 (*_excess)[u] += rem; 528 if (u != _target && !_level->active(u)) {529 _level->activate(u);530 }531 528 } 532 529 } … … 538 535 _flow->set(e, 0); 539 536 (*_excess)[v] += rem; 540 if (v != _target && !_level->active(v)) { 541 _level->activate(v); 542 } 543 } 544 } 537 } 538 } 539 for (NodeIt n(_graph); n != INVALID; ++n) 540 if(n!=_source && n!=_target && _tolerance.positive((*_excess)[n])) 541 _level->activate(n); 542 545 543 return true; 546 544 } … … 559 557 _phase = true; 560 558 561 Node n = _level->highestActive(); 562 int level = _level->highestActiveLevel(); 563 while (n != INVALID) { 559 while (true) { 564 560 int num = _node_num; 565 561 566 while (num > 0 && n != INVALID) { 562 Node n = INVALID; 563 int level = -1; 564 565 while (num > 0) { 566 n = _level->highestActive(); 567 if (n == INVALID) goto first_phase_done; 568 level = _level->highestActiveLevel(); 569 --num; 570 567 571 Value excess = (*_excess)[n]; 568 572 int new_level = _level->maxLevel(); … … 630 634 _level->deactivate(n); 631 635 } 632 633 n = _level->highestActive(); 634 level = _level->highestActiveLevel(); 636 } 637 638 num = _node_num * 20; 639 while (num > 0) { 640 while (level >= 0 && _level->activeFree(level)) { 641 --level; 642 } 643 if (level == -1) { 644 n = _level->highestActive(); 645 level = _level->highestActiveLevel(); 646 if (n == INVALID) goto first_phase_done; 647 } else { 648 n = _level->activeOn(level); 649 } 635 650 --num; 636 } 637 638 num = _node_num * 20; 639 while (num > 0 && n != INVALID) { 651 640 652 Value excess = (*_excess)[n]; 641 653 int new_level = _level->maxLevel(); … … 703 715 _level->deactivate(n); 704 716 } 705 706 while (level >= 0 && _level->activeFree(level)) { 707 --level; 708 } 709 if (level == -1) { 710 n = _level->highestActive(); 711 level = _level->highestActiveLevel(); 712 } else { 713 n = _level->activeOn(level); 714 } 715 --num; 716 } 717 } 717 } 718 } 719 first_phase_done:; 718 720 } 719 721
Note: See TracChangeset
for help on using the changeset viewer.