解法一:将一个方块看成3x3的矩阵,使用dfs判断有多少块区域,参考:
[C++] [动画] 转换成岛屿个数
class Solution {
public:
void dfs(vector<vector<int>>& g,int i,int j,int n)
{
if(i>=0 && i<n*3 && j>=0 && j<n*3 && g[i][j]==0)
{
g[i][j]=1;
dfs(g,i-1,j,n);
dfs(g,i+1,j,n);
dfs(g,i,j-1,n);
dfs(g,i,j+1,n);
}
}
int regionsBySlashes(vector<string>& grid) {
int n=grid.size();
vector<vector<int>> g(n*3,vector<int>(n*3));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(grid[i][j]=='/')
{
g[i*3][j*3+2]=g[i*3+1][j*3+1]=g[i*3+2][j*3]=1;
}
else if(grid[i][j]=='\\')
{
g[i*3][j*3]=g[i*3+1][j*3+1]=g[i*3+2][j*3+2]=1;
}
}
}
int res=0;
for(int i=0;i<n*3;i++)
{
for(int j=0;j<n*3;j++)
{
if(!g[i][j])
{
dfs(g,i,j,n);
res++;
}
}
}
return res;
}
};