[2] Изменение положения функций _find_start() и _find_exit() из PathFindingStrategy в функционал класса Maze

This commit is contained in:
SerKin0 2026-05-24 17:58:56 +03:00
parent f393ad5203
commit 86b31473f3
5 changed files with 22 additions and 24 deletions

View File

@ -183,6 +183,22 @@ class Maze:
neighbors.append(cell)
return neighbors
@property
def start(self) -> Optional[Cell]:
for y in range(self._height):
for x in range(self._width):
if self[y, x].is_start:
return self[y, x]
return None
@property
def exit(self) -> Optional[Cell]:
for y in range(self._height):
for x in range(self._width):
if self[y, x].is_exit:
return self[y, x]
return None
@property
def shape(self) -> tuple[int, int]:

View File

@ -23,24 +23,6 @@ class PathFindingStrategy(ABC):
Пустой список, если путь не найден.
"""
def _find_start(self, maze: Maze) -> Optional[Cell]:
row, col = maze.shape
for y in range(row):
for x in range(col):
if maze[y, x].is_start:
return maze[y, x]
return None
def _find_exit(self, maze: Maze) -> Optional[Cell]:
row, col = maze.shape
for y in range(row):
for x in range(col):
if maze[y, x].is_exit:
return maze[y, x]
return None
def _reconstruct_path(
self, came_from: dict[Cell, Optional[Cell]], end: Cell
) -> list[Cell]:

View File

@ -15,9 +15,9 @@ class AStarStrategy(PathFindingStrategy):
def find_path(self, maze: Maze, start: Optional[Cell] = None, exit: Optional[Cell] = None) -> list[Cell]:
if start is None:
start = self._find_start(maze)
start = maze.start
if exit is None:
exit = self._find_exit(maze)
exit = self.exit
g_score: dict[Cell, int] = {start: 0}
came_from: dict[Cell, Optional[Cell]] = {start: None}

View File

@ -16,9 +16,9 @@ class BFSStrategy(PathFindingStrategy):
self, maze: Maze, start: Optional[Cell] = None, exit: Optional[Cell] = None
) -> list[Cell]:
if start is None:
start = self._find_start(maze)
start = maze.start
if exit is None:
exit = self._find_exit(maze)
exit = maze.exit
came_from: dict[Cell, Optional[Cell]] = {start: None}
queue: deque[Cell] = deque([start])

View File

@ -14,9 +14,9 @@ class DFSStrategy(PathFindingStrategy):
self, maze: Maze, start: Optional[Cell] = None, exit: Optional[Cell] = None
) -> list[Cell]:
if start is None:
start = self._find_start(maze)
start = maze.start
if exit is None:
exit = self._find_exit(maze)
exit = maze.exit
came_from: dict[Cell, Optional[Cell]] = {start: None}
stack: list[Cell] = [start]