eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Сломать тюрьму

Сломать тюрьму

Миссия Джона состоит в том, чтобы вытащить двух человек из тюрьмы. Тюрьма представляет собой одноэтажное здание. Джон сумел достать подробный план этажа с указанием всех стен и дверей. Он также знает расположение двух людей, которых должен освободить. Тюремные охранники не проблема - он спланировал диверсию, в результате которой они покинут здание практически незаметно.

Двери являются его главной проблемой. Все двери, как правило, удаленно открываются из диспетчерской, однако Джон может открыть их с помощью других средств. После того как ему удалось открыть дверь, она остается открытой. Тем не менее открытие двери занимает много времени. Поэтому он хочет свести к минимуму количество дверей, которое он должен открыть. Сможете ли Вы помочь Джону спланировать оптимальный маршрут, по которому он сможет добраться до двух заключенных?

prb6426

Входные данные

Первая строка содержит количество тестов, не более 100. Первая строка каждого теста содержит два числа n и m (2n, m100) – ширину и высоту карты. Следующие n строк по m символов описывают здание тюрьмы:

  • '.' пустое место.
  • '*' непроницаемая стена.
  • '#' дверь.
  • '$' один из двух людей которых следует освободить.

Джон может свободно перемещаться по внешней стороне здания. Карта содержит ровно два человека. До каждого человека внутри тюрьмы существует путь из внешней стороны.

Выходные данные

Для каждого теста вывести в отдельной строке наименьшее количество дверей, которое Джон должен открыть для освобождения обоих узников.

Лимит времени 1 секунда
Лимит использования памяти 128 MiB
Входные данные #1
3
5 9
****#****
*..#.#..*
****.****
*$#.#.#$*
*********
5 11
*#*********
*$*...*...*
*$*.*.*.*.*
*...*...*.*
*********.*
9 9
*#**#**#*
*#**#**#*
*#**#**#*
*#**.**#*
*#*#.#*#*
*$##*##$*
*#*****#*
*.#.#.#.*
*********
Выходные данные #1
4
0
9
Источник 2013 Benelux Algorithm Programming Contest (BAPC )