标签:
该题目主要考察了堆栈和深度优先搜索的知识点。在递归深度太深导致运行出错是,可以采用栈保存结果,减小递归的深度。
详细代码如下:
class Solution {
public:
stack<pair<int,int>> data;
void solve(vector<vector<char>> &board) {
if(board.size() == 0)
return ;
GetPoint(board);
WriteResult(board);
}
void GetPoint(vector<vector<char>> &board)
{
int i =0;
pair<int,int> temp;
for (i=0; i<board[0].size();i++)
{
temp.first = 0;
temp.second = i;
ExtendPoint(board,temp);
temp.first = board.size()-1;
temp.second = i;
ExtendPoint(board,temp);
}
for (i=0; i<board.size();i++)
{
temp.first = i;
temp.second = 0;
ExtendPoint(board,temp);
temp.first = i;
temp.second = board[0].size()-1;
ExtendPoint(board,temp);
}
while(data.size() !=0)
{
temp = data.top();
data.pop();
ExtendPoint(board,temp);
}
}
void ExtendPoint(vector<vector<char>> &board,pair<int,int> point)
{
if(point.first < 0 || point.first >= board.size())
return ;
if(point.second <0 || point.second >= board[0].size())
return ;
int x,y;
pair<int,int> temp;
x= point.first;
y= point.second;
if(board[x][y] == ‘X‘ || board[x][y] == ‘A‘)
return ;
board[x][y] = ‘A‘;
temp.first = x-1;
temp.second = y;
data.push(temp);
temp.first = x+1;
temp.second = y;
data.push(temp);
temp.first = x;
temp.second = y-1;
data.push(temp);
temp.first = x;
temp.second = y+1;
data.push(temp);
}
void WriteResult(vector<vector<char>> &board)
{
int i,j;
for (i=0; i< board.size(); i++)
for(j=0; j< board[i].size();j++)
{
if(board[i][j] == ‘A‘)
{
board[i][j] = ‘O‘;
}
else if(board[i][j] == ‘O‘)
{
board[i][j] = ‘X‘;
}
}
}
};
标签:
原文地址:http://www.cnblogs.com/xgcode/p/4187515.html