From: Christian Heller <c.heller@plomlompom.de>
Date: Tue, 10 Mar 2015 02:41:31 +0000 (+0100)
Subject: Optimize Dijkstra map algorithm.
X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/static/%7B%7B%20web_path%20%7D%7D/decks/tasks?a=commitdiff_plain;h=127ef6060162f49b7def9528dc3adc3affd55988;p=plomrogue

Optimize Dijkstra map algorithm.
---

diff --git a/src/server/libplomrogue.c b/src/server/libplomrogue.c
index 9a4e69a..0e8f3fb 100644
--- a/src/server/libplomrogue.c
+++ b/src/server/libplomrogue.c
@@ -519,7 +519,8 @@ extern uint16_t get_neighbor_score(uint8_t i)
  * neighbor's score is at least two points lower than the current cell's score,
  * re-set it to 1 point higher than its lowest-scored neighbor. Repeat this
  * whole process until all cells have settled on their final score. Ignore cells
- * whose score is greater than UINT16_MAX - 1 (treat those as unreachable).
+ * whose score is greater than UINT16_MAX - 1 (treat those as unreachable). Also
+ * ignore cells whose score is smaller or equal the number of past iterations.
  * Return 1 on error, else 0.
  */
 extern uint8_t dijkstra_map()
@@ -539,7 +540,8 @@ extern uint8_t dijkstra_map()
         scores_still_changing = 0;
         for (pos = 0; pos < map_size; pos++)
         {
-            if (score_map[pos] <= max_score)
+            uint16_t score = score_map[pos];
+            if (score <= max_score && score > i_scans)
             {
                 get_neighbor_scores(pos, max_score, neighbors);
                 min_neighbor = max_score;