AcWing 5976. 细胞(DFS找联通块模型)
原题链接
简单
典型的dfs找联通块的模型,题意很明显,1~9表示细胞,则相当于将0作为墙壁,开始找联通块的数量
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n,m,res;
char g[N][N];
bool st[N][N];
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int a=x+dx[i];
int b=y+dy[i];
if (a<0||a>=n||b<0||b>=m) continue;
if (g[a][b]=='0') continue;
if (st[a][b]) continue;
st[a][b]=true;
dfs(a,b);
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>g[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if (g[i][j]>'0'&&st[i][j]==false){ //如果这个点是细胞的一部分并且还没被搜索过,就开始搜
dfs(i,j);
res++;
}
}
}
cout<<res;
return 0;
}