[Lemon-commits] Alpar Juttner: Merge bugfix #372
Lemon HG
hg at lemon.cs.elte.hu
Fri Jun 25 06:51:44 CEST 2010
details: http://lemon.cs.elte.hu/hg/lemon/rev/a22b3f1bf83e
changeset: 987:a22b3f1bf83e
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Fri Jun 25 06:00:56 2010 +0200
description:
Merge bugfix #372
diffstat:
lemon/preflow.h | 44 ++++++++++++++++++++++++--------------------
1 files changed, 24 insertions(+), 20 deletions(-)
diffs (75 lines):
diff --git a/lemon/preflow.h b/lemon/preflow.h
--- a/lemon/preflow.h
+++ b/lemon/preflow.h
@@ -576,12 +576,18 @@
void startFirstPhase() {
_phase = true;
- Node n = _level->highestActive();
- int level = _level->highestActiveLevel();
- while (n != INVALID) {
+ while (true) {
int num = _node_num;
- while (num > 0 && n != INVALID) {
+ Node n = INVALID;
+ int level = -1;
+
+ while (num > 0) {
+ n = _level->highestActive();
+ if (n == INVALID) goto first_phase_done;
+ level = _level->highestActiveLevel();
+ --num;
+
Value excess = (*_excess)[n];
int new_level = _level->maxLevel();
@@ -647,14 +653,22 @@
} else {
_level->deactivate(n);
}
-
- n = _level->highestActive();
- level = _level->highestActiveLevel();
- --num;
}
num = _node_num * 20;
- while (num > 0 && n != INVALID) {
+ while (num > 0) {
+ while (level >= 0 && _level->activeFree(level)) {
+ --level;
+ }
+ if (level == -1) {
+ n = _level->highestActive();
+ level = _level->highestActiveLevel();
+ if (n == INVALID) goto first_phase_done;
+ } else {
+ n = _level->activeOn(level);
+ }
+ --num;
+
Value excess = (*_excess)[n];
int new_level = _level->maxLevel();
@@ -720,19 +734,9 @@
} else {
_level->deactivate(n);
}
-
- while (level >= 0 && _level->activeFree(level)) {
- --level;
- }
- if (level == -1) {
- n = _level->highestActive();
- level = _level->highestActiveLevel();
- } else {
- n = _level->activeOn(level);
- }
- --num;
}
}
+ first_phase_done:;
}
/// \brief Starts the second phase of the preflow algorithm.
More information about the Lemon-commits
mailing list