Ctrl K

Участок для дома рядом со всеми зданиями

Сложная
План квартала — таблица plan размером m × n, в каждой клетке одно из чисел: - 0 — свободная земля, по ней можно ходить; - 1 — здание, через него пройти нельзя; - 2 — препятствие, через него тоже пройти нельзя. На одной из свободных клеток нужно построить дом. Ходить можно только вверх, вниз, влево и вправо по свободным клеткам; расстояние от дома до здания — наименьшее число шагов от клетки дома до клетки здания (последний шаг — на само здание). Выберите свободную клетку, из которой можно дойти до каждого здания, так, чтобы сумма расстояний до всех зданий была минимальной, и верните эту сумму. Если подходящей клетки нет, верните -1.
Пример 1
plan=[[1, 0, 0, 1], [0, 2, 0, 0], [0, 0, 0, 1]] → 6

Лучше всего строить в клетке (0, 2): до зданий 2, 1 и 3 шага, всего 6. А, например, клетка (0, 1) даёт 1 + 2 + 4 = 7 — это хуже.

Пример 2
plan=[[1, 2, 0], [2, 0, 0], [0, 0, 1]] → -1

Здание в левом верхнем углу со всех сторон закрыто — до него не дойти ни из одной свободной клетки.

Пример 3
plan=[[0, 1, 0]] → 1

Обе свободные клетки стоят рядом со зданием.

Ограничения
  • 1 ≤ m, n ≤ 50
  • plan[i][j] — 0, 1 или 2
  • В квартале есть хотя бы одно здание
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРамка вокруг кляксы СложнаяСамый длинный подъём по карте СложнаяЛужи на рельефной карте СложнаяШарик и лунка СложнаяПодрезать кусты по росту Сложная
загружаем Python…
Вход
plan=[[1, 0, 0, 1], [0, 2, 0, 0], [0, 0, 0, 1]]
Ожидается
6

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 89 тестов на сервере, включая скрытые.