summaryrefslogtreecommitdiffstats
path: root/algorithms.py
diff options
context:
space:
mode:
authorGustav Sörnäs <gusso230@student.liu.se>2020-11-05 16:43:16 +0100
committerGustav Sörnäs <gusso230@student.liu.se>2020-11-05 16:43:16 +0100
commit7f66e5c211ced9bc0286b893b9a86534fe9ec43a (patch)
treed6c69db8b8c6a1bff67e21564662de2cb86c9c5b /algorithms.py
parent3a7c90f683c1c29790c2033de02c501f76735aa9 (diff)
downloadtdde25-7f66e5c211ced9bc0286b893b9a86534fe9ec43a.tar.gz
initial dijkstra
Diffstat (limited to 'algorithms.py')
-rw-r--r--algorithms.py23
1 files changed, 22 insertions, 1 deletions
diff --git a/algorithms.py b/algorithms.py
index 7140a17..06d768c 100644
--- a/algorithms.py
+++ b/algorithms.py
@@ -1,3 +1,4 @@
+import heapq
import math
@@ -32,4 +33,24 @@ def get_closest_node_id(nodes, source_node):
def find_shortest_path(nodes, source_id, target_id):
""" Return the shortest path using Dijkstra's algortihm. """
- return []
+ queue = []
+ visited = set()
+
+ print("neighbours", nodes[source_id].neighbours)
+ for neighbour in nodes[source_id].neighbours:
+ heapq.heappush(queue, (length_haversine(nodes[source_id], neighbour), (source_id, neighbour.id)))
+
+ while queue:
+ cand_dist, cand_path = heapq.heappop(queue)
+ walk_end = cand_path[-1]
+ if walk_end == target_id:
+ return cand_path
+ if walk_end in visited:
+ continue
+ visited.add(walk_end)
+ for neighbour in nodes[walk_end].neighbours:
+ print(neighbour)
+ if neighbour not in visited:
+ heapq.heappush(queue, (cand_dist + length_haversine(nodes[walk_end], neighbour), cand_path + (neighbour.id, )))
+ # no path found
+ return None