Задача №2. Вы очнулись в определённой ячейке (x1,y1) лабиринта, с его картой в руке. Карта показывает, что лабиринт представляет собой окружённый сплошной стеной прямоугольник высотой N и шириной M, состоящий из ячеек, каждая ячейка самого лабиринта – это проход 0 или стена 1. Перемещаться по лабиринту можно по горизонтали (меняя координату x) либо по вертикали (меняя координату y) на одну ячейку, перемещаться по диагонали (меняя за один шаг обе координаты) нельзя.
На карте отмечен выход, и он находится в ячейке с координатами (x2,y2).
Ваша задача – найти длину кратчайшего пути из ячейки пробуждения в ячейку выхода. В случае, если такого пути нет – нужно вывести 0
Входные данные (поступают в стандартный поток ввода)
Первая строка - целые числа N и M через пробел (2≤N≤500, 2≤M≤500)
Вторая строка – целые числа x1 и y1 через пробел (0≤x1≤499, 0≤y1≤499) – координаты точки пробуждения
Третья строка – целые числа x2 и y2 через пробел (0≤x2≤499, 0≤y2≤499) – координаты точки выхода
Далее N строк, на каждой из которых M чисел 0 или 1 через пробел
Нумерации осей в передаваемых значениях следуют слева направо для X и с первой полученной строки до последней для Y. По координатам (x1,y1) и (x2,y2) всегда будут проходы. Координаты точки входа и выхода не совпадают.
Все входные данные наших тестов всегда соблюдают указанные параметры, дополнительные проверки не требуются
Выходные данные (ожидаются в стандартном потоке вывода)
Одно целое число, длина кратчайшего пути из точки (x1,y1) в точку (x2,y2), или 0, если из одной точки нельзя попасть в другую
Пример 1
Ввод:
2 3 0 0 2 1 0 0 0 0 0 0
Вывод:
3
Пример без стен для понимания структуры входных данных
Пример 2
Ввод:
3 3 0 0 2 0 0 1 0 0 1 0 0 0 0
Вывод:
6
Придётся обойти стену
Пример 3
Ввод:
3 3 0 0 2 0 0 1 0 0 1 0 0 1 0
Вывод:
0
А здесь обойти не получится, выход недостижим
Пример решения:
N = int(input())
M = int(input())
x1 = int(input())
y1 = int(input())
Вычисляем координаты выхода
x2 = x1 + N - 1
y2 = y1 + M - 1
Создаем двумерный массив для хранения информации о проходах и стенах
map = [[0] * M for i in range(N)]
Заполняем карту проходами и стенами
for i in range(M):
for j in range(N):
if (i == 0 or j == 0) and (i == N - 2 or j == M - 2):
map[i][j] = 0 # выход
elif i == x1 and j == y1:
map[x1][y1] = 1 # пробуждение
else:
if map[i-1][j] == 1 or map[i+1][j] == 1:
map[i][j] = map[i][j-1] + 1
if j < 0:
map[i][j] += map[i][M-1]
elif map[i][j+1] == 1:
map[i][j] = map[i-1][j] + 1
else:
print("No path found!")
exit(0)
print(map)
Пишет:
StdErr: Traceback (most recent call last):
File "script.py", line 1, in <module>
N = int(input())
ValueError: invalid literal for int() with base 10: '2 3'
Status: Runtime Error (NZEC)
Статус: Ошибка во время выполнения.
Помогите решить пожалуйста. Чтобы не писал пишет не правильно. Подскажите.
x2 = x1 + N - 1? – Stanislav Volodarskiy Sep 01 '23 at 22:26if j < 0:. Какjможет оказаться меньше нуля? Это шутка? – Stanislav Volodarskiy Sep 01 '23 at 22:31