COIN-OR::LEMON - Graph Library

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lemon/preflow.h

    r924 r877  
    544544          _flow->set(e, (*_capacity)[e]);
    545545          (*_excess)[u] += rem;
     546          if (u != _target && !_level->active(u)) {
     547            _level->activate(u);
     548          }
    546549        }
    547550      }
     
    553556          _flow->set(e, 0);
    554557          (*_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      }
    561563      return true;
    562564    }
     
    575577      _phase = true;
    576578
    577       while (true) {
     579      Node n = _level->highestActive();
     580      int level = _level->highestActiveLevel();
     581      while (n != INVALID) {
    578582        int num = _node_num;
    579583
    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) {
    589585          Value excess = (*_excess)[n];
    590586          int new_level = _level->maxLevel();
     
    652648            _level->deactivate(n);
    653649          }
     650
     651          n = _level->highestActive();
     652          level = _level->highestActiveLevel();
     653          --num;
    654654        }
    655655
    656656        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) {
    670658          Value excess = (*_excess)[n];
    671659          int new_level = _level->maxLevel();
     
    733721            _level->deactivate(n);
    734722          }
    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      }
    738736    }
    739737
Note: See TracChangeset for help on using the changeset viewer.