Changeset 628:aa1804409f29 in lemon for lemon/preflow.h
- Timestamp:
- 04/14/09 10:35:38 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
lemon/preflow.h
r606 r628 405 405 _phase = true; 406 406 for (NodeIt n(_graph); n != INVALID; ++n) { 407 _excess->set(n, 0);407 (*_excess)[n] = 0; 408 408 } 409 409 … … 418 418 419 419 std::vector<Node> queue; 420 reached .set(_source, true);420 reached[_source] = true; 421 421 422 422 queue.push_back(_target); 423 reached .set(_target, true);423 reached[_target] = true; 424 424 while (!queue.empty()) { 425 425 _level->initNewLevel(); … … 430 430 Node u = _graph.source(e); 431 431 if (!reached[u] && _tolerance.positive((*_capacity)[e])) { 432 reached .set(u, true);432 reached[u] = true; 433 433 _level->initAddItem(u); 434 434 nqueue.push_back(u); … … 445 445 if ((*_level)[u] == _level->maxLevel()) continue; 446 446 _flow->set(e, (*_capacity)[e]); 447 _excess->set(u, (*_excess)[u] + (*_capacity)[e]);447 (*_excess)[u] += (*_capacity)[e]; 448 448 if (u != _target && !_level->active(u)) { 449 449 _level->activate(u); … … 479 479 } 480 480 if (excess < 0 && n != _source) return false; 481 _excess->set(n, excess);481 (*_excess)[n] = excess; 482 482 } 483 483 … … 488 488 489 489 std::vector<Node> queue; 490 reached .set(_source, true);490 reached[_source] = true; 491 491 492 492 queue.push_back(_target); 493 reached .set(_target, true);493 reached[_target] = true; 494 494 while (!queue.empty()) { 495 495 _level->initNewLevel(); … … 501 501 if (!reached[u] && 502 502 _tolerance.positive((*_capacity)[e] - (*_flow)[e])) { 503 reached .set(u, true);503 reached[u] = true; 504 504 _level->initAddItem(u); 505 505 nqueue.push_back(u); … … 509 509 Node v = _graph.target(e); 510 510 if (!reached[v] && _tolerance.positive((*_flow)[e])) { 511 reached .set(v, true);511 reached[v] = true; 512 512 _level->initAddItem(v); 513 513 nqueue.push_back(v); … … 525 525 if ((*_level)[u] == _level->maxLevel()) continue; 526 526 _flow->set(e, (*_capacity)[e]); 527 _excess->set(u, (*_excess)[u] + rem);527 (*_excess)[u] += rem; 528 528 if (u != _target && !_level->active(u)) { 529 529 _level->activate(u); … … 537 537 if ((*_level)[v] == _level->maxLevel()) continue; 538 538 _flow->set(e, 0); 539 _excess->set(v, (*_excess)[v] + rem);539 (*_excess)[v] += rem; 540 540 if (v != _target && !_level->active(v)) { 541 541 _level->activate(v); … … 578 578 if (!_tolerance.less(rem, excess)) { 579 579 _flow->set(e, (*_flow)[e] + excess); 580 _excess->set(v, (*_excess)[v] + excess);580 (*_excess)[v] += excess; 581 581 excess = 0; 582 582 goto no_more_push_1; 583 583 } else { 584 584 excess -= rem; 585 _excess->set(v, (*_excess)[v] + rem);585 (*_excess)[v] += rem; 586 586 _flow->set(e, (*_capacity)[e]); 587 587 } … … 601 601 if (!_tolerance.less(rem, excess)) { 602 602 _flow->set(e, (*_flow)[e] - excess); 603 _excess->set(v, (*_excess)[v] + excess);603 (*_excess)[v] += excess; 604 604 excess = 0; 605 605 goto no_more_push_1; 606 606 } else { 607 607 excess -= rem; 608 _excess->set(v, (*_excess)[v] + rem);608 (*_excess)[v] += rem; 609 609 _flow->set(e, 0); 610 610 } … … 616 616 no_more_push_1: 617 617 618 _excess->set(n, excess);618 (*_excess)[n] = excess; 619 619 620 620 if (excess != 0) { … … 651 651 if (!_tolerance.less(rem, excess)) { 652 652 _flow->set(e, (*_flow)[e] + excess); 653 _excess->set(v, (*_excess)[v] + excess);653 (*_excess)[v] += excess; 654 654 excess = 0; 655 655 goto no_more_push_2; 656 656 } else { 657 657 excess -= rem; 658 _excess->set(v, (*_excess)[v] + rem);658 (*_excess)[v] += rem; 659 659 _flow->set(e, (*_capacity)[e]); 660 660 } … … 674 674 if (!_tolerance.less(rem, excess)) { 675 675 _flow->set(e, (*_flow)[e] - excess); 676 _excess->set(v, (*_excess)[v] + excess);676 (*_excess)[v] += excess; 677 677 excess = 0; 678 678 goto no_more_push_2; 679 679 } else { 680 680 excess -= rem; 681 _excess->set(v, (*_excess)[v] + rem);681 (*_excess)[v] += rem; 682 682 _flow->set(e, 0); 683 683 } … … 689 689 no_more_push_2: 690 690 691 _excess->set(n, excess);691 (*_excess)[n] = excess; 692 692 693 693 if (excess != 0) { … … 732 732 typename Digraph::template NodeMap<bool> reached(_graph); 733 733 for (NodeIt n(_graph); n != INVALID; ++n) { 734 reached .set(n, (*_level)[n] < _level->maxLevel());734 reached[n] = (*_level)[n] < _level->maxLevel(); 735 735 } 736 736 … … 740 740 std::vector<Node> queue; 741 741 queue.push_back(_source); 742 reached .set(_source, true);742 reached[_source] = true; 743 743 744 744 while (!queue.empty()) { … … 750 750 Node v = _graph.target(e); 751 751 if (!reached[v] && _tolerance.positive((*_flow)[e])) { 752 reached .set(v, true);752 reached[v] = true; 753 753 _level->initAddItem(v); 754 754 nqueue.push_back(v); … … 759 759 if (!reached[u] && 760 760 _tolerance.positive((*_capacity)[e] - (*_flow)[e])) { 761 reached .set(u, true);761 reached[u] = true; 762 762 _level->initAddItem(u); 763 763 nqueue.push_back(u); … … 793 793 if (!_tolerance.less(rem, excess)) { 794 794 _flow->set(e, (*_flow)[e] + excess); 795 _excess->set(v, (*_excess)[v] + excess);795 (*_excess)[v] += excess; 796 796 excess = 0; 797 797 goto no_more_push; 798 798 } else { 799 799 excess -= rem; 800 _excess->set(v, (*_excess)[v] + rem);800 (*_excess)[v] += rem; 801 801 _flow->set(e, (*_capacity)[e]); 802 802 } … … 816 816 if (!_tolerance.less(rem, excess)) { 817 817 _flow->set(e, (*_flow)[e] - excess); 818 _excess->set(v, (*_excess)[v] + excess);818 (*_excess)[v] += excess; 819 819 excess = 0; 820 820 goto no_more_push; 821 821 } else { 822 822 excess -= rem; 823 _excess->set(v, (*_excess)[v] + rem);823 (*_excess)[v] += rem; 824 824 _flow->set(e, 0); 825 825 } … … 831 831 no_more_push: 832 832 833 _excess->set(n, excess);833 (*_excess)[n] = excess; 834 834 835 835 if (excess != 0) {
Note: See TracChangeset
for help on using the changeset viewer.