Advertisement
Hasli4

bucktrakc10

Mar 27th, 2025
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.19 KB | None | 0 0
  1. def read_maze(filename):
  2.     """Чтение лабиринта из файла"""
  3.     with open(filename, 'r') as f:
  4.         return [line.strip().split() for line in f]
  5.  
  6. def count_paths(maze, mouse_x, mouse_y, cheese_x, cheese_y):
  7.     """
  8.    Рекурсивный поиск путей к сыру
  9.    
  10.    Параметры:
  11.    - maze: лабиринт
  12.    - mouse_x, mouse_y: текущие координаты мышки
  13.    - cheese_x, cheese_y: координаты сыра
  14.    """
  15.     N = len(maze)
  16.    
  17.     # Создаем матрицу посещенных клеток
  18.     visited = [[False for _ in range(N)] for _ in range(N)]
  19.    
  20.     def is_valid_move(x, y):
  21.         """Проверка корректности хода"""
  22.         return (
  23.             0 <= x < N and
  24.             0 <= y < N and
  25.             maze[x][y] == ' ' and  # Проверка на пустую клетку
  26.             not visited[x][y]      # Клетка не посещена
  27.         )
  28.    
  29.     def find_paths_recursive(current_x, current_y):
  30.         """
  31.        Рекурсивный поиск путей
  32.        
  33.        Базовые случаи:
  34.        1. Мышка достигла сыра
  35.        2. Невозможность движения
  36.        """
  37.         # Достижение цели
  38.         if current_x == cheese_x and current_y == cheese_y:
  39.             return 1
  40.        
  41.         # Отмечаем текущую клетку как посещенную
  42.         visited[current_x][current_y] = True
  43.        
  44.         # Возможные направления движения (вверх, вправо, вниз, влево)
  45.         directions = [
  46.             (-1, 0),  # Вверх
  47.             (0, 1),   # Вправо
  48.             (1, 0),   # Вниз
  49.             (0, -1)   # Влево
  50.         ]
  51.        
  52.         total_paths = 0
  53.        
  54.         # Исследование каждого направления
  55.         for dx, dy in directions:
  56.             next_x, next_y = current_x + dx, current_y + dy
  57.            
  58.             # Проверка возможности перемещения
  59.             if is_valid_move(next_x, next_y):
  60.                 # Рекурсивный вызов для следующей позиции
  61.                 total_paths += find_paths_recursive(next_x, next_y)
  62.        
  63.         # Возвращаем клетку в непосещенное состояние (backtracking)
  64.         visited[current_x][current_y] = False
  65.        
  66.         return total_paths
  67.    
  68.     # Начинаем поиск путей с начальной позиции мышки
  69.     return find_paths_recursive(mouse_x, mouse_y)
  70.  
  71. def main():
  72.     # Чтение лабиринта
  73.     maze = read_maze('maze.txt')
  74.    
  75.     # Координаты мышки и сыра (указать правильные)
  76.     mouse_x, mouse_y = 1, 1  # Начальная позиция мышки
  77.     cheese_x, cheese_y = 3, 3  # Позиция сыра
  78.    
  79.     # Подсчет путей
  80.     paths = count_paths(maze, mouse_x, mouse_y, cheese_x, cheese_y)
  81.     print(f"Количество путей: {paths}")
  82.  
  83. if __name__ == "__main__":
  84.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement