#include<bits/stdc++.h>
using namespace std;
int fa[905];
char g[305][305];
int dir[2][2]={{0,1},{1,0}};
int Find(int x){
return !fa[x]?x:fa[x]=Find(fa[x]);
}
bool Merge(int x,int y){
int fx=Find(x),fy=Find(x);
if(fx==fy) return false;
fa[fx]=fy;
return true;
}
int main(){
int m,n;
cin>>m>>n;
for(int i=0;i<m*n;i++) fa[i]=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>g[i];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(g[i][j]=='0') continue;
int idx=i*n+j;
for(int d=0;d<2;d++){
int ni=i+dir[d][0],nj=j+dir[d][1];
if(ni<m&&nj<n&&g[ni][nj]=='1'){
int nidx=ni*n+nj;
Merge(idx,nidx);
}
}
}
}
int cnt=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(g[i][j]=='1'){
int idx=i*n+j;
if(Find(idx)==idx){
cnt++;
}
}
}
}
cout<<cnt;
}
in:
4 5
11110
11010
11000
00000
预期:
1
实际
0