Skip to content

Commit dd568b5

Browse files
committed
Pathfinding: Added optimization for Dijkstra
1 parent d35d457 commit dd568b5

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

2019/pathfinding.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,10 @@ def add_walls(self, vertices):
162162
for vertex in vertices:
163163
if vertex in self.edges:
164164
del self.edges[vertex]
165-
self.vertices.remove(vertex)
165+
if isinstance(self.vertices, list):
166+
self.vertices.remove(vertex)
167+
else:
168+
del self.vertices[vertex]
166169
changed = True
167170

168171
self.edges = {
@@ -489,6 +492,7 @@ def dijkstra(self, start, end=None):
489492
heapq.heapify(frontier)
490493
self.distance_from_start = {start: 0}
491494
self.came_from = {start: None}
495+
min_distance = float("inf")
492496

493497
while frontier:
494498
current_distance, vertex = heapq.heappop(frontier)
@@ -497,6 +501,10 @@ def dijkstra(self, start, end=None):
497501
if not neighbors:
498502
continue
499503

504+
# No need to explore neighbors if we already found a shorter path to the end
505+
if current_distance > min_distance:
506+
continue
507+
500508
for neighbor, weight in neighbors.items():
501509
# We've already checked that node, and it's not better now
502510
if neighbor in self.distance_from_start and self.distance_from_start[
@@ -511,6 +519,9 @@ def dijkstra(self, start, end=None):
511519
self.distance_from_start[neighbor] = current_distance + weight
512520
self.came_from[neighbor] = vertex
513521

522+
if neighbor == end:
523+
min_distance = min(min_distance, current_distance + weight)
524+
514525
return end is None or end in self.distance_from_start
515526

516527
def a_star_search(self, start, end=None):

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy