首页 > 代码库 > Surrounded Regions
Surrounded Regions
该题目主要考察了堆栈和深度优先搜索的知识点。在递归深度太深导致运行出错是,可以采用栈保存结果,减小递归的深度。
详细代码如下:
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‘; } } } };
Surrounded Regions
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。