- 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) {