Giả sử chúng ta có một ma trận như thế này:
11111
12221
12321
12221
11111
Ma trận này đại diện cho một địa hình và mỗi ô đại diện cho một phần địa hình. Số lượng trong mỗi ô biểu thị thời gian phần địa hình cần được đốt cháy hoàn toàn (tính bằng phút, nếu cần một đơn vị đo lường), theo khả năng cháy của nó . Nếu đám cháy bắt đầu tại bất kỳ vị trí nào (ô), ô đó cần được đốt cháy hoàn toàn trước khi lửa truyền sang các ô liền kề (chỉ ngang và dọc, không chéo). Vì vậy, nếu đám cháy được bắt đầu ở vị trí trung tâm, đám cháy cần:
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
Giải trình:
- Lửa bắt đầu từ [2,2] (dựa trên 0), có thời gian cháy là 3.
- Sau 3 phút, [1,2], [2,1], [2,3], [3,2] bắt đầu cháy.
- Sau 2 phút, các tế bào đó kết thúc quá trình cháy và lửa lan truyền đến tất cả các ô lân cận, nhưng [0,2], [2,0], [2,4], [0,4] chỉ cần thêm 1 phút để đốt, vì vậy
- Sau 1 phút, các tế bào đó bị cháy và tế bào lan truyền đến các tế bào lân cận của chúng.
- Sau 1 phút nữa, các tế bào còn lại từ bước 3 kết thúc quá trình cháy và lửa lan truyền đến các ô liền kề của chúng (đã bị cháy, vì vậy không có gì xảy ra).
- Sau 1 phút cuối, lửa kết thúc đốt cháy toàn bộ địa hình.
Vì vậy, giải pháp cho trường hợp đó là 8 phút. Nếu lửa bắt đầu ở ô trên cùng bên trái [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
Vì vậy, bây giờ tổng thời gian là 10 phút.
Các thách thức
Cho một ma trận NxM (N> 0, M> 0) các giá trị nguyên biểu thị thời gian mà mọi ô cần được tiêu thụ hoàn toàn, hãy viết chương trình / hàm ngắn nhất lấy ma trận đó và một cặp số nguyên với vị trí mà lửa bắt đầu và trả lại / in thời gian cần thiết để ngọn lửa tiêu thụ hoàn toàn toàn bộ địa hình.
- Mỗi tế bào sẽ có thời gian ghi dương (khác không). Bạn không thể giả sử một giá trị tối đa cho các ô.
- Ma trận không cần phải vuông cũng không đối xứng.
- Ma trận có thể là 0-index hoặc 1-index, tùy thích.
- Vị trí có thể được cung cấp dưới dạng một tham số duy nhất với một bộ số nguyên, hai tham số riêng biệt với bất kỳ định dạng hợp lý nào khác.
- Kích thước của ma trận không thể được chỉ định làm tham số đầu vào.
- Bạn không cần phải xuất ra mọi bước trung gian, chỉ cần lượng thời gian được yêu cầu. Nhưng tôi sẽ không phàn nàn nếu các bước được hình dung theo bất kỳ cách nào.
Một vi dụ khac:
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
Đây là môn đánh gôn , vì vậy có thể chương trình ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!
1
đếnM*N