1. 程式人生 > 其它 >leetcode-dfs-130. 被圍繞的區域

leetcode-dfs-130. 被圍繞的區域

思想很重要

class Solution {
public:
    void solve(vector<vector<char>>& board) {
        int m = board.size();
        int n = board[0].size();
        // 從邊緣開始,因為四周肯定不被包圍,和四周O聯通的先呼叫dfs演算法標記為A
        for(int i = 0; i < m; i++){
            dfs(board,i,0);
            dfs(board,i,n-1);
        }
        
for(int i = 0; i < n; i++){ dfs(board,0,i); dfs(board,m-1,i); } // 最後剩下的肯定O肯定是被X包圍的 // 最後只需要將標記為A的復原為O,將其餘的O改為X即可 for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ if(board[i][j] == 'A') board[i][j]
= 'O'; else if(board[i][j] == 'O') board[i][j] = 'X'; } } return; } void dfs(vector<vector<char>>& board, int i, int j){ int m = board.size(); int n = board[0].size(); if(i>=m||i<0||j>=n||j<0
||board[i][j]!='O') return; board[i][j]='A'; dfs(board,i+1,j); dfs(board,i-1,j); dfs(board,i,j+1); dfs(board,i,j-1); } };