Changes in lemon/preflow.h [924:a80381c43760:877:141f9c0db4a3] in lemon-main
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/preflow.h
r924 r877 544 544 _flow->set(e, (*_capacity)[e]); 545 545 (*_excess)[u] += rem; 546 if (u != _target && !_level->active(u)) { 547 _level->activate(u); 548 } 546 549 } 547 550 } … … 553 556 _flow->set(e, 0); 554 557 (*_excess)[v] += rem; 555 } 556 } 557 for (NodeIt n(_graph); n != INVALID; ++n) 558 if(n!=_source && n!=_target && _tolerance.positive((*_excess)[n])) 559 _level->activate(n); 560 558 if (v != _target && !_level->active(v)) { 559 _level->activate(v); 560 } 561 } 562 } 561 563 return true; 562 564 } … … 575 577 _phase = true; 576 578 577 while (true) { 579 Node n = _level->highestActive(); 580 int level = _level->highestActiveLevel(); 581 while (n != INVALID) { 578 582 int num = _node_num; 579 583 580 Node n = INVALID; 581 int level = -1; 582 583 while (num > 0) { 584 n = _level->highestActive(); 585 if (n == INVALID) goto first_phase_done; 586 level = _level->highestActiveLevel(); 587 --num; 588 584 while (num > 0 && n != INVALID) { 589 585 Value excess = (*_excess)[n]; 590 586 int new_level = _level->maxLevel(); … … 652 648 _level->deactivate(n); 653 649 } 650 651 n = _level->highestActive(); 652 level = _level->highestActiveLevel(); 653 --num; 654 654 } 655 655 656 656 num = _node_num * 20; 657 while (num > 0) { 658 while (level >= 0 && _level->activeFree(level)) { 659 --level; 660 } 661 if (level == -1) { 662 n = _level->highestActive(); 663 level = _level->highestActiveLevel(); 664 if (n == INVALID) goto first_phase_done; 665 } else { 666 n = _level->activeOn(level); 667 } 668 --num; 669 657 while (num > 0 && n != INVALID) { 670 658 Value excess = (*_excess)[n]; 671 659 int new_level = _level->maxLevel(); … … 733 721 _level->deactivate(n); 734 722 } 735 } 736 } 737 first_phase_done:; 723 724 while (level >= 0 && _level->activeFree(level)) { 725 --level; 726 } 727 if (level == -1) { 728 n = _level->highestActive(); 729 level = _level->highestActiveLevel(); 730 } else { 731 n = _level->activeOn(level); 732 } 733 --num; 734 } 735 } 738 736 } 739 737
Note: See TracChangeset
for help on using the changeset viewer.