---
# System prepended metadata

title: Leetcode 130. Surrounded Regions
tags: [Martix, Recursion, DFS, Graph, Leetcode]

---

# Leetcode 130. Surrounded Regions

## 題解

### DFS

透過標記聯通邊界的 O 為 # 來判斷

```python=
class Solution:
    def solve(self, board: List[List[str]]) -> None:
        """
        Do not return anything, modify board in-place instead.
        """
        m,n = len(board),len(board[0])

        directions = [
            [0,1],[1,0],[0,-1],[-1,0]
        ]

        def dfs(x,y):
            if x < 0 or x >= n or y < 0 or y >= m or board[y][x] != "O":
                return
            board[y][x] = "#"
            for direction in directions:
                new_x = x + direction[0]
                new_y = y + direction[1]
                dfs(new_x,new_y)

        # 標記聯通邊界的 O
        for y in range(m):
            for x in range(n):
                if x == 0 or x == n - 1 or y == 0 or y == m - 1:
                    dfs(x,y)
        
        for y in range(m):
            for x in range(n):
                if board[y][x] == "#":
                    board[y][x] = "O"
                elif board[y][x] == "O":
                    board[y][x] = "X"
```