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

นับจำนวนเกาะที่แตกต่างกันในเมทริกซ์ 2D ใน Python

Number of Islands (DFS/BFS)

กำหนด Binary Matrix หาจำนวน "เกาะ" (Island) ที่เป็นกลุ่ม 1 ติดกันแนวนอน/แนวตั้ง (ไม่ใช่แนวทแยง) รอบนอกถือเป็นน้ำ (0)

อัลกอริทึม DFS (Flood Fill)

  1. วนทุกเซลล์ หากเจอ 1 เพิ่มจำนวนเกาะ และเรียก DFS/BFS ทำให้เซลล์นั้นและเพื่อนบนที่เป็น 1 กลายเป็น 0 (ทำให้เป็นน้ำ)
  2. DFS 4 ทิศทาง: บน, ล่าง, ซ้าย, ขวา

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


class Solution:
    def numIslands(self, grid):
        if not grid: return 0
        n, m = len(grid), len(grid[0])
        ans = 0
        def dfs(i, j):
            if i<0 or j<0 or i>=n or j>=m or grid[i][j]=='0':
                return
            grid[i][j] = '0'
            dfs(i+1,j); dfs(i-1,j); dfs(i,j+1); dfs(i,j-1)
        for i in range(n):
            for j in range(m):
                if grid[i][j] == '1':
                    ans += 1
                    dfs(i, j)
        return ans

grid = [
    ["1","1","0","0","0"],
    ["1","1","0","0","0"],
    ["0","0","1","0","0"],
    ["0","0","0","1","1"]
]
print(Solution().numIslands(grid))  # 3