2026-rff_mp/volkovim/task2/strategies/dfs.py
2026-05-24 21:48:59 +03:00

52 lines
1.1 KiB
Python

from strategies.strategy import PathFindingStrategy
class DFSStrategy(PathFindingStrategy):
def findPath(self, maze, start, exit):
frontier = [start]
visited = {
start.getPosition()
}
ancestry = {}
explored_count = 0
while frontier:
current = frontier.pop()
explored_count += 1
if current == exit:
break
neighbors = maze.getNeighbors(current)
for neighbor in reversed(neighbors):
point = neighbor.getPosition()
if point in visited:
continue
visited.add(point)
ancestry[point] = current
frontier.append(neighbor)
if exit.getPosition() not in visited:
return [], explored_count
route = []
cursor = exit
while cursor != start:
route.append(cursor)
cursor = ancestry[cursor.getPosition()]
route.append(start)
route.reverse()
return route, explored_count