Misalkan kita memiliki matriks seperti ini:
11111
12221
12321
12221
11111
Matriks ini mewakili medan, dan setiap sel mewakili sebagian medan. Jumlah di setiap sel mewakili waktu bagian medan perlu dibakar sepenuhnya (dalam hitungan menit, jika unit pengukuran diperlukan), sesuai dengan kemampuan terbakarnya . Jika api mulai pada posisi tertentu (sel), sel itu harus benar-benar terbakar sebelum api merambat ke sel-sel yang berdekatan (hanya horisontal dan vertikal, bukan diagonal). Jadi, jika api dimulai pada posisi tengah, api membutuhkan:
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
Penjelasan:
- Api dimulai pada [2,2] (berbasis 0), yang memiliki waktu bakar 3.
- Setelah 3 menit, [1,2], [2,1], [2,3], [3,2] mulai terbakar.
- Setelah 2 menit, sel-sel itu berakhir terbakar dan merambat ke semua sel yang berdekatan, tetapi [0,2], [2,0], [2,4], [0,4] hanya perlu 1 menit lagi untuk terbakar, jadi
- Setelah 1 menit, sel-sel itu dibakar dan sel merambat ke sel-sel yang berdekatan.
- Setelah 1 menit lagi, sisa sel dari langkah 3 berakhir terbakar dan merambat ke sel-sel yang berdekatan (yang sudah terbakar, sehingga tidak terjadi apa-apa).
- Setelah 1 menit terakhir, api berakhir membakar seluruh medan.
Jadi solusi untuk kasus itu adalah 8 menit. Jika api dimulai di sel paling kiri atas [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
Jadi sekarang total waktu adalah 10 menit.
Tantangan
Diberikan matriks NxM (N> 0, M> 0) dari nilai integer yang mewakili waktu setiap sel perlu dikonsumsi sepenuhnya, tulis program / fungsi terpendek yang mengambil matriks dan sepasang bilangan bulat dengan posisi api dimulai pada , dan mengembalikan / mencetak waktu yang dibutuhkan api untuk sepenuhnya menghabiskan seluruh medan.
- Setiap sel akan memiliki waktu pembakaran positif (bukan nol). Anda tidak dapat mengasumsikan nilai maksimum untuk sel.
- Matriks tidak harus persegi atau simetris.
- Matriks dapat 0-diindeks atau 1-diindeks, seperti yang Anda inginkan.
- Posisi dapat diberikan sebagai parameter tunggal dengan tupel bilangan bulat, dua parameter terpisah dari format beralasan lainnya.
- Dimensi matriks tidak dapat ditentukan sebagai parameter input.
- Anda tidak perlu menampilkan setiap langkah perantara, cukup jumlah waktu yang diminta. Tetapi saya tidak akan mengeluh jika langkah-langkah tersebut divisualisasikan dengan cara apa pun.
Contoh lain:
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
Ini adalah kode-golf , jadi semoga program terpendek untuk setiap bahasa menang!
1
keM*N