class Cell: def __init__( self, x: int, y: int, is_wall=False, is_start=False, is_exit=False ): self.x = x self.y = y self.isWall = is_wall self.isStart = is_start self.isExit = is_exit def isPassable(self): return not self.isWall def __repr__(self): return f"Cell({self.x},{self.y})" def __eq__(self, other): return ( isinstance(other, Cell) and self.x == other.x and self.y == other.y ) def __hash__(self): return hash((self.x, self.y)) class Maze: def __init__(self, width: int, height: int): self.width = width self.height = height self.cells = [] self.start = None self.exit = None def add_row(self, row): self.cells.append(row) for cell in row: if cell.isStart: self.start = cell if cell.isExit: self.exit = cell def getCell(self, x, y): if 0 <= x < self.height and 0 <= y < self.width: return self.cells[x][y] return None def getNeighbors(self, cell): directions = [ (-1, 0), # вверх (1, 0), # вниз (0, -1), # влево (0, 1) # вправо ] neighbors = [] for dx, dy in directions: nx = cell.x + dx ny = cell.y + dy neighbor = self.getCell(nx, ny) if ( neighbor and neighbor.isPassable() ): neighbors.append(neighbor) return neighbors def printMaze(self): for row in self.cells: line = "" for cell in row: if cell.isStart: line += "S" elif cell.isExit: line += "E" elif cell.isWall: line += "#" else: line += " " print(line)