Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนวันที่ใช้ในการไหม้ต้นไม้ทั้งหมดใน Python


สมมติว่าเมทริกซ์ 2D แทนป่า: 0=ว่าง, 1=ต้นไม้, 2=ไฟ ทุกวัน ต้นไม้จะไหม้ถ้ามีเพื่อนบ้าน (บนล่างซ้ายขวา) อยู่ในสถานะไฟ หาจำนวนวันที่ใช้จนต้นไม้ทั้งหมดไหม้ ถ้าไม่ได้คืน -1

เช่น เมทริกซ์ [[1,2,1],[1,0,1],[1,1,1]] ให้ผลลัพธ์ 4

ขั้นตอนการแก้ปัญหา

  • เก็บตำแหน่งไฟเริ่มต้นใน twos
  • ทำ BFS ทุกวัน: ขยายไฟไปเพื่อนบ้านที่เป็นต้นไม้ (1)
  • นับจำนวนวันจนไม่มีการขยายใหม่
  • ตรวจสอบว่าเหลือต้นไม้ (1) หรือไม่ ถ้ามีคืน -1 มิฉะนั้นคืนจำนวนวัน

ตัวอย่างโค้ด

class Solution:
    def solve(self, matrix):
        ans = 0
        twos = []
        for i in range(len(matrix)):
            for j in range(len(matrix[0])):
                if matrix[i][j] == 2:
                    twos.append((i,j))
        while twos:
            temp = []
            for i,j in twos:
                for x,y in [(i+1,j),(i,j+1),(i-1,j),(i,j-1)]:
                    if 0<=x

อินพุต

matrix = [[1,2,1],[1,0,1],[1,1,1]]

เอาต์พุต

4