Припустимо, у нас є така матриця:
11111
12221
12321
12221
11111
Ця матриця являє собою місцевість, і кожна комірка являє собою частину місцевості. Кількість у кожній комірці відображає час, за який ділянку місцевості потрібно повністю спалити (за хвилини, якщо потрібна одиниця вимірювання), відповідно до її горючості . Якщо пожежа починається в будь-якому даному положенні (комірці), цю клітинку потрібно повністю спалити до того, як вогонь пошириться на сусідні комірки (лише горизонтальні та вертикальні, а не діагональні). Отже, якщо пожежа розпочалася в центральному положенні, вогонь потребує:
11111 11111 11111 11011 10001 00000
12221 3 m. 12221 2 m. 12021 1 m. 11011 1 m. 00000 1 m. 00000
12321 -----> 12021 -----> 10001 -----> 00000 -----> 00000 -----> 00000
12221 12221 12021 11011 00000 00000
11111 11111 11111 11011 10001 00000
Пояснення:
- Вогонь починається з [2,2] (на основі 0), час горіння якого становить 3.
- Через 3 хвилини [1,2], [2,1], [2,3], [3,2] починають горіти.
- Через 2 хвилини ці клітини закінчуються горінням і вогонь поширюється на всі сусідні клітини, але [0,2], [2,0], [2,4], [0,4] спалити потрібно лише ще 1 хвилину, тому
- Через 1 хвилину ці клітини спалюються, і клітина поширюється до сусідніх клітин.
- Ще через 1 хвилину решта осередків від кроку 3 закінчують горіння і вогонь поширюється на сусідні клітини (які вже згоріли, тому нічого не відбувається).
- Через 1 останню хвилину вогонь закінчується спаленням всієї місцевості.
Тож рішення цієї справи - 8 хвилин. Якщо пожежа починається у верхній лівій осередку [0,0]:
11111 01111 00111 00011 00001 00000
12221 1 12221 1 02221 1 01221 1 00121 1 00011 1
12321 --> 12321 --> 12321 --> 02321 --> 01321 --> 00321 -->
12221 12221 12221 12221 02221 01221
11111 11111 11111 11111 11111 01111
00000 00000 00000 00000 00000
00000 1 00000 1 00000 1 00000 1 00000
00221 --> 00110 --> 00000 --> 00000 --> 00000
00221 00121 00020 00010 00000
00111 00011 00001 00000 00000
Тож тепер загальний час становить 10 хвилин.
Змагання
Враховуючи матрицю NxM (N> 0, M> 0) цілих значень, що представляють час, який кожну клітинку потрібно повністю споживати, напишіть найкоротшу програму / функцію, яка займає цю матрицю, і пару цілих чисел із положенням, у якому починається пожежа. , і повертає / друкує час, необхідний для пожежі, щоб повністю спожити всю територію.
- Кожна клітина матиме позитивний (ненульовий) час горіння. Ви не можете припустити максимальне значення для комірок.
- Матриця не повинна бути ні квадратною, ні симетричною.
- Матриця може бути 0-індексованою або 1-індексованою, як вам подобається.
- Позиція може бути задана у вигляді одного параметра з набором цілих чисел, двох окремих параметрів будь-якого іншого розумного формату.
- Розміри матриці не можна вказати як вхідні параметри.
- Вам не потрібно виводити кожен проміжний крок, лише кількість запитуваного часу. Але я не буду скаржитися, якщо кроки візуалізовані будь-яким чином.
Ще один приклад:
Fire starts at [1,1] (a '>' represents a minute):
4253 4253 4253 4153 4043 3033 2023 0001 0000
2213 > 2113 > 2013 > 1003 > 0002 > 0001 > 0000 >> 0000 > 0000
1211 1211 1211 1111 1001 0000 0000 0000 0000
Output: 9
Це код-гольф , тому може виграти найкоротша програма для кожної мови!
1
доM*N