我认为我这个是bfs做法,但是看官方题解,我这个应该是dfs,想想也确实。
我的想法是如果在边缘上找到O点则把与之相连的O点全部变成A(随便一个不同的符号),遍历完之后,就有X,O,A三种符号,后面再变一次
X->X
O->X
A->O
class Solution {
public:
int m,n;
void solve(vector<vector<char>>& board) {
m=board.size();
n=board[0].size();
for(int i=0;i<board.size();i++){
for(int j=0;j<board[0].size();j++){
if((i==0|| i ==m-1|| j==n-1|| j==0)&& board[i][j]=='O'){ //发现边缘的O点
bfs(i,j,board); //把与之相连的一片全部变成A
}
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(board[i][j]=='O') board[i][j]='X';
else if(board[i][j]=='A') board[i][j]='O';
}
}
}
void bfs(int i,int j, vector<vector<char>>& board){
if(i>=0 && i<m && j>=0 && j<n && board[i][j]=='O') {
board[i][j]='A';
bfs(i-1,j,board);
bfs(i+1,j,board);
bfs(i,j-1,board);
bfs(i,j+1,board);
}
return ;
}
};