首页 > 代码库 > 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