forked from UNN/2026-rff_mp
Реализован DFS
This commit is contained in:
parent
89c11085ba
commit
1a562a7594
|
|
@ -6,7 +6,8 @@ from task2.mazeObjects.cell import Cell
|
||||||
import queue
|
import queue
|
||||||
|
|
||||||
class BFS(PathFindingStrategy):
|
class BFS(PathFindingStrategy):
|
||||||
"""Поиск в ширину – гарантирует кратчайший путь по количеству шагов."""
|
"""Поиск в ширину – гарантирует кратчайший путь по количеству шагов.
|
||||||
|
Возвращает None, если пути нет"""
|
||||||
def findPath(self, maze: Maze, start: Cell, exit: Cell):
|
def findPath(self, maze: Maze, start: Cell, exit: Cell):
|
||||||
visited = dict()
|
visited = dict()
|
||||||
parents = dict()
|
parents = dict()
|
||||||
|
|
@ -37,6 +38,6 @@ class BFS(PathFindingStrategy):
|
||||||
while current:
|
while current:
|
||||||
path.append(current)
|
path.append(current)
|
||||||
if current not in parents:
|
if current not in parents:
|
||||||
return []
|
return None
|
||||||
current = parents[current]
|
current = parents[current]
|
||||||
return path[::-1]
|
return path[::-1]
|
||||||
|
|
@ -4,6 +4,40 @@ from task2.mazeObjects.maze import Maze
|
||||||
from task2.mazeObjects.cell import Cell
|
from task2.mazeObjects.cell import Cell
|
||||||
|
|
||||||
class DFS(PathFindingStrategy):
|
class DFS(PathFindingStrategy):
|
||||||
"""Поиск в глубину – быстрый, но не обязательно кратчайший."""
|
"""Поиск в глубину – быстрый, но не обязательно кратчайший.
|
||||||
|
Возвращает None, если пути нет"""
|
||||||
def findPath(self, maze: Maze, start: Cell, exit: Cell):
|
def findPath(self, maze: Maze, start: Cell, exit: Cell):
|
||||||
...
|
visited = dict()
|
||||||
|
parents = dict()
|
||||||
|
stack = []
|
||||||
|
|
||||||
|
stack.append(start)
|
||||||
|
visited[start] = 0
|
||||||
|
parents[start] = None
|
||||||
|
|
||||||
|
while stack:
|
||||||
|
current = stack.pop()
|
||||||
|
|
||||||
|
# Условие нахождение выхода
|
||||||
|
if current == exit: break
|
||||||
|
|
||||||
|
# Перебор соседей
|
||||||
|
for hood in maze.getNeighbors(current):
|
||||||
|
if hood in visited:
|
||||||
|
continue
|
||||||
|
visited[hood] = visited[current] + 1
|
||||||
|
parents[hood] = current
|
||||||
|
stack.append(hood)
|
||||||
|
|
||||||
|
return self.restorePath(parents, start, exit)
|
||||||
|
|
||||||
|
def restorePath(self, parents: dict, start: Cell, exit: Cell) -> list[Cell]|None:
|
||||||
|
path = []
|
||||||
|
current = exit
|
||||||
|
while current:
|
||||||
|
path.append(current)
|
||||||
|
if current not in parents:
|
||||||
|
return None
|
||||||
|
current = parents[current]
|
||||||
|
return path[::-1]
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user