LeetCode 八月打卡day11 130. 被围绕的区域(DFS)
思路:
-
我们可以先对边界上的’O’进行DFS,将所有’O’先修改为其他字符,这里取了’Y’字符。 对四条边搜索完后剩下的’O修改为’X’字符后,我们再将’Y’字符修改为’O’字符,就能得到正确答案。
代码:
class Solution {
public:
int dx[4]={
0,0,1,-1};
int dy[4]={
1,-1,0,0};
void dfs(int x,int y,vector<vector<char>>& board)
{
board[x][y]=Y;
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=1&&xx<board.size()-1&&yy>=1&&yy<board[0].size()-1&&board[xx][yy]==O)
{
dfs(xx,yy,board);
}
}
return ;
}
void solve(vector<vector<char>>& board) {
if(board.size()!=0)
{
int n=board.size();
int m=board[0].size();
for(int i=0;i<n;i++)
{
if(board[i][0]==O)
dfs(i,0,board);
if(board[i][m-1]==O)
dfs(i,m-1,board);
}
for(int i=0;i<m;i++)
{
if(board[0][i]==O)
dfs(0,i,board);
if(board[n-1][i]==O)
dfs(n-1,i,board);
}
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[i].size();j++)
{
if(board[i][j]==Y)
board[i][j]=O;
else if(board[i][j]==O)
board[i][j]=X;
}
}
}
}
};
上一篇:
IDEA上Java项目控制台中文乱码
