สมมติว่าเรามีเมทริกซ์ดังนี้:
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 matrix (N> 0, M> 0) ของค่าจำนวนเต็มที่แทนเวลาที่ทุกเซลล์ต้องใช้อย่างสมบูรณ์เขียนโปรแกรม / ฟังก์ชันที่สั้นที่สุดที่ใช้ matrix นั้นและจำนวนเต็มคู่กับตำแหน่งที่ไฟเริ่ม และส่งคืน / พิมพ์เวลาที่จำเป็นสำหรับไฟในการใช้พื้นที่ทั้งหมดอย่างสมบูรณ์
- ทุกเซลล์จะมีเวลาการเผาไหม้เป็นบวก (ไม่เป็นศูนย์) คุณไม่สามารถถือว่าค่าสูงสุดสำหรับเซลล์
- เมทริกซ์ไม่จำเป็นต้องเป็นสี่เหลี่ยมจัตุรัสหรือสมมาตร
- เมทริกซ์สามารถเป็นดัชนี 0 หรือ 1 ดัชนีตามที่คุณต้องการ
- สามารถกำหนดตำแหน่งเป็นพารามิเตอร์เดียวโดยมี tuple ของจำนวนเต็มสองพารามิเตอร์แยกกันของรูปแบบที่เหมาะสมอื่น ๆ
- ไม่สามารถระบุขนาดของเมทริกซ์เป็นพารามิเตอร์อินพุต
- คุณไม่จำเป็นต้องส่งออกทุกขั้นตอนขั้นกลางเพียงแค่จำนวนเวลาที่ถาม แต่ฉันจะไม่บ่นว่าขั้นตอนนั้นเป็นภาพใด ๆ
ตัวอย่างอื่น:
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