思路:dfs
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int m,n,tot;
int dx[]={0,1,-1,0,0};
int dy[]={0,0,0,1,-1};
char s[1005][1005];
int map[1005][1005];
int vis[1005][1005];
int dfs(int x,int y)
{
for(int i=1;i<=4;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>n||nx<1||ny>m||ny<1)
continue;
if(map[nx][ny])
{
map[nx][ny]=0;把四个方向的细胞赋为0
dfs(nx,ny);
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>s[i][j];
if(s[i][j]=='0')
map[i][j]=0;
else
map[i][j]=1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(map[i][j]==1)
{
map[i][j]=0;
dfs(i,j);//找一个细胞
tot++;//它周围的细胞已被赋为0,计数器加1
}
cout<<tot<<endl;
return 0;
}