思想很重要
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); } };
原文:https://www.cnblogs.com/ymec/p/15136775.html