LeetCode算法搜索

来源:互联网 发布:电火花成型加工编程 编辑:程序博客网 时间:2024/06/07 16:29

Given a 2D board containing'X'and'O', capture all regions surrounded by'X'.

A region is captured by flipping all'O's into'X's in that surrounded region .

For example,

X X X XX O O XX X O XX O X X


After running your function, the board should be:

X X X XX X X XX X X XX O X X

class Solution {
public:
int dire[4][2] = { { 0, 1 }, { 0, -1 }, { -1, 0 }, {1,0} };
bool isplace(vector<vector<char>>& board,int m, int n)//防止越界
{
int row = board.size();
int col = board[0].size();
return !(m>=row||m<0||n>=col||n<0);
}
void dfs(vector<vector<char>>& board,int x,int y)
{
for (int i = 0; i < 4; i++)
{
int nx = x + dire[i][0];
int ny = y + dire[i][1];
if (isplace(board, nx, ny)&&board[nx][ny]=='O')
{
board[nx][ny] = '*';
dfs(board, nx, ny);
}
}
}
void solve(vector<vector<char>> &board) {
int row = board.size();
if (!row)
return ;
int col = board[0].size();
for (int i = 0; i < col; i++)
{//从最上一行开始搜索
if (board[0][i] == 'O')
{
board[0][i] = '*';
dfs(board, 0, i);
}
}
for (int j = 0; j <row; j++)//左边
{
if (board[j][0]=='O')
{
board[j][0] = '*';
dfs(board, j, 0);
}
}
for (int i = 0; i < col; i++)
{
if (board[row - 1][i] == 'O')
{
board[row - 1][i] = '*';
dfs(board,row-1,i);
}
}
for (int j = 0; j < row; j++)
{
if (board[j][col - 1] == 'O')
{
board[j][col - 1] = '*';
dfs(board, j, col - 1);
}
}
//选择恢复
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (board[i][j] == '*')
board[i][j] = 'O';
else if(board[i][j]=='O')
{
board[i][j] = 'X';
}
}
}
}
};

原创粉丝点击