Петя нашёл консоль с электронной игрой. Консоль состоит из экрана, на котором изображено игровое поле, и трёх кнопок:
(направо).
Под центральным столбцом игрового поля находится птичка. Пете нужно управлять движением птички по игровому полю.
При каждом нажатии любой кнопки птичка передвигается на одну строку выше.
При этом если нажата кнопка
, то птичка смещается на один столбец вправо, а если нажата кнопка #
, то птичка никуда не смещается, а просто поднимается выше в том же столбце.
Если в момент нажатия на кнопку <
python
from queue import Queue
def find_path(game_field):
n = len(game_field)
m = len(game_field[0])
directions = {'right': '>', 'up': '^', 'stay': '#'}
dx = {'right': 0, 'up': -1, 'stay': 0}
dy = {'right': 1, 'up': 0, 'stay': 0}
start = (n-1, m-1)
end = (0, 0)
queue = Queue()
queue.put(start)
parents = {}
parents[start] = None
distances = {}
for i in range(n):
for j in range(m):
distances[(i, j)] = float('inf')
distances[start] = 0
while not queue.empty():
current = queue.get()
x, y = current
for direction in ['right', 'up', 'stay']:
new_x = x + dx[direction]
new_y = y + dy[direction]
if 0 <= new_x < n and 0 <= new_y < m and game_field[new_x][new_y] != '#':
if distances[current] + 1 < distances[(new_x, new_y)]:
distances[(new_x, new_y)] = distances[current] + 1
parents[(new_x, new_y)] = current
queue.put((new_x, new_y))
if end not in parents:
return "Невозможно достичь верхнего левого угла игрового поля"
path = []
current = end
while current != start:
parent = parents[current]
if parent[1] < current[1]:
path.append(directions['right'])
elif parent[0] > current[0]:
path.append(directions['up'])
else:
path.append(directions['stay'])
current = parent
return ''.join(path[::-1])
Подставив свое игровое поле в переменную `game_field` и вызвав функцию `find_path(game_field)`, Петя получит строку, представляющую найденный путь от нижнего правого угла игрового поля до верхнего левого угла. Если путь не существует, функция вернет соответствующее сообщение.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет