2026-05-23 13:37:43 +03:00
|
|
|
from Strategies.strat import PathFindingStrategy
|
2026-05-25 13:45:18 +03:00
|
|
|
from Strategies.path import restore
|
2026-05-22 23:34:48 +03:00
|
|
|
|
|
|
|
|
class DFS(PathFindingStrategy):
|
2026-05-23 13:37:43 +03:00
|
|
|
def findPath(self, maze, start, exit):
|
2026-05-25 16:02:23 +03:00
|
|
|
if exit is None:
|
|
|
|
|
return [], 0
|
|
|
|
|
|
2026-05-22 23:34:48 +03:00
|
|
|
stack = [start]
|
|
|
|
|
visited = {start}
|
|
|
|
|
parent = {}
|
|
|
|
|
|
2026-05-25 13:45:18 +03:00
|
|
|
while stack:
|
2026-05-22 23:34:48 +03:00
|
|
|
current = stack.pop()
|
|
|
|
|
|
|
|
|
|
if current == exit:
|
|
|
|
|
break
|
|
|
|
|
|
2026-05-25 13:45:18 +03:00
|
|
|
for n in maze.getNeighbors(current):
|
2026-05-22 23:34:48 +03:00
|
|
|
if n not in visited:
|
|
|
|
|
visited.add(n)
|
|
|
|
|
parent[n] = current
|
|
|
|
|
stack.append(n)
|
|
|
|
|
|
2026-05-25 16:02:23 +03:00
|
|
|
return restore(parent, start, exit), len(visited)
|