问题描述
问题分析
所有的矩阵连通域问题都是用递归方式解决,可以总结出一套通用的算法,就是首先处理当前位置的元素,然后根据题目的连通域设置,对周围4领域或者8邻域进行递归处理。
代码
class Solution {
public:
void Change(vector<vector<char>> &board,int i,int j)
{
int m=board.size();
int n=board[0].size();
//截至条件
if( (i<0||i>=m) || (j<0||j>=n) || board[i][j]=='X'|| board[i][j]=='L') return ;
//4邻域进行遍历递归
board[i][j]='L';
Change(board,i-1,j);
Change(board,i,j+1);
Change(board,i+1,j);
Change(board,i,j-1);
}
void solve(vector<vector<char>> &board)
{
//只处理四周的一圈
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
if(i==0||i==(board.size()-1)||j==0||(j==board[0].size()-1))
Change(board,i,j);
}
}
//将包围的O全部置为X;
for(int i=0;i<board.size();i++)
{
for(int j=0;j<board[0].size();j++)
{
if(board[i][j]=='L') board[i][j]='O';
else{ board[i][j]='X';}
}
}
}
};