2026-rff_mp/ProninVV/task-2-oop/Deikstra.py

44 lines
1.2 KiB
Python

from strategy import PathFindingStrategy
from Maze import Maze, Cell
class DeikstraFind(PathFindingStrategy):
def findPath(self, maze, start, exit):
if not start or not exit:
return [], len(parents)
queue = [start]
distances = {start: 0}
parents = {start: None}
while len(queue) != 0:
best_cell = queue[0]
for cell in queue:
if distances[cell] < distances[best_cell]:
best_cell = cell
u = best_cell
queue.remove(u)
if u == exit:
path = []
current = exit
while current is not None:
path.append(current)
current = parents[current]
path.reverse()
return path, len(parents)
for child in maze.getNeighbors(u):
distance_through_u = distances[u] + 1
if distance_through_u < distances.get(child, float('inf')):
distances[child] = distance_through_u
parents[child] = u
if child not in queue:
queue.append(child)
return [], len(parents)