Марсианский лабиринт
Ограничения: время – 1s/2s, память – 128MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Одной из номинаций марсианского весеннего турнира юных программистов является "исследование лабиринта".
Каждый участник этой номинации помещается в настоящий лабиринт и получает определённое задание – например, как можно быстрее попасть в указанную точку лабиринта.
Для строительства лабиринта жюри турнира использует кубические блоки из марсианского пластика.
Лабиринт строится по заранее разработанной схеме,
изображающей пустые клетки и клетки с блоками.
Участник может перемещаться из клетки в пустую соседнюю клетку,
имеющую с текущей клеткой общую сторону.
Взглянув на схему лабиринта, один из членов жюри обнаружил,
что, если убрать некоторые блоки, то участники этого не заметят, поскольку,
из какой бы изначально пустой клетки они не начинали свой путь,
они не смогут попасть в клетки, занятые этими блоками.
На основе сделанного наблюдения жюри желает сократить затраты на строительство лабиринта.
Напишите программу, получающую на входе описание лабиринта,
и генерирующую новый лабиринт, состоящий из минимального количества блоков.
При этом для каждой клетки нового лабиринта, которая была пустой в старом лабиринте,
множество достижимых из неё клеток должно совпадать для обоих лабиринтов.
Первая строка входного файла содержит два целых числа – `N\ M` (`1\ ≤\ N,\ M\ ≤\ 100`).
Далее идут `N` строк по `M` символов, описывающие лабиринт. Символ '#' (ASCII 35) обозначает блок, а
'.' (ASCII 46) – пустое место.
Выходной файл должен содержать `N` строк по `M` символов – описание нового оптимизированного лабиринта в формате, идентичном входному.
Пример ввода 1
3 7
......#
.#..#.#
....#..
Пример вывода 1
......#
.#..#.#
....#..
Пример ввода 2
3 8
##.#..##
##.#.###
...#.##.
Пример вывода 2
.#.#..#.
##.#.#.#
...#.##.
Источник: http://imcs.dvgu.ru/cats/ Весенний турнир, 2011