10476: Bomberman


Відправити розв'язок

Бали: 100 (partial)
Time limit: 1.0s
Memory limit: 64M

Author:
Problem type
Allowed languages
Brain****, C, C++, Java, Pascal, Python, v8js

Вася відкрив для себе класичну гру «Bomberman», дійовою особою якої є Бомбермен. Цей персонаж пересувається по ігровому полю, що є прямокутником з \(N\) рядків і \(M\) стовпців. Кожна клітина поля або вільна для проходу, або зайнята стіною. В одній із клітинок знаходиться бонус, до якого необхідно дістатися Бомбермену. Для цього він має рівно 3 бомби. За хід Бомбермен може зрушити до сусідньої клітини, якщо вона вільна, або підірвати стіну, розташовану в ній, використавши одну бомбу.

В останньому випадку клітина стає прохідною і згодом Бомбермен може стати на неї. Вася хоче визначити, за яку мінімальну кількість ходів Бомбермен зможе дістатися бонуса, або ж дізнатися, що це зробити неможливо, тоді Вася може спокійно видалити «Bomberman» - а й повернутися до старої доброї Дотки. Сусідними є клітини, що мають спільну сторону. Бомбермен не може виходити за межі поля.

Формат вхідних даних

У першому рядку містяться два числа \(N\) і \(M\) — кількість рядків і стовпців поля відповідно \(( 1 ≤ N , M ≤ 20 )\).

Кожен із наступних \(N\) рядків містить рівно \(M\) символів, що описують поле. Вільні клітини позначені символом "." (ASCII код 46), зайняті-символом "W" (ASCII код 87), бонус-символом "*" (ASCII код 42), Бомбермен-символом "B" (ASCII код 66). Гарантується, що на полі знаходиться один бонус.

Формат вихідних даних

Виведіть одне число—мінімальна кількість ходів, необхідна для того, щоб дістатися бонуса, або −1, якщо дістатися бонуса неможливо.

Пояснення

У першому прикладі необхідно підірвати стіну на другому рядку в першому стовпці і пройти Бомберменом вниз, а потім праворуч. У другому прикладі необхідно підірвати мінімум 4 стіни, щоб дістатися бонуса, тому відповідь −1.

Приклад вхідних даних

5 6
B.....
WWWWW.
......
.WWWWW
.....*

Приклад вихідних даних

10

Коментарі

Ще немає коментарів.