leetcode-dfs-130. 被圍繞的區域
阿新 • • 發佈:2021-08-13
思想很重要
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); } };