OCD cosmetics ...
[mtp.git] / mtp_graph.cc
index 33d5a4f..6c97c5d 100644 (file)
@@ -110,20 +110,21 @@ void Vertex::increase_distance_in_heap(Vertex **heap, int heap_size) {
   Vertex **c1, **c2, **h;
   // omg, that's beautiful
   h = heap_slot;
-  while(c1 = heap + 2 * (h - heap + 1) - 1, c2 = c1 + 1,
-        (c1 < heap + heap_size && (*c1)->distance_from_source < (*h)->distance_from_source)
-        ||
-        (c2 < heap + heap_size && (*c2)->distance_from_source < (*h)->distance_from_source)
-        ) {
-    if(c1 < heap + heap_size &&
-     !(c2 < heap + heap_size && (*c2)->distance_from_source < (*c1)->distance_from_source)){
-      swap(*c1, *h);
-      swap((*c1)->heap_slot, (*h)->heap_slot);
-      h = c1;
-    } else {
+  while(c1 = heap + 2 * (h - heap) + 1,
+        c1 < heap + heap_size &&
+        (c2 = c1 + 1,
+         (*c1)->distance_from_source < (*h)->distance_from_source
+         ||
+         (c2 < heap + heap_size && (*c2)->distance_from_source < (*h)->distance_from_source)
+         )) {
+    if(c2 < heap + heap_size && (*c2)->distance_from_source <= (*c1)->distance_from_source) {
       swap(*c2, *h);
       swap((*c2)->heap_slot, (*h)->heap_slot);
       h = c2;
+    } else {
+      swap(*c1, *h);
+      swap((*c1)->heap_slot, (*h)->heap_slot);
+      h = c1;
     }
   }
 }