这题看没人写BFS的,就想写一下。
#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
char g[N][N];
bool col[N],row[N];
int n,m,cnt;
struct node
{
int x,y;
};
void bfs(node s)
{
queue<node>q;
q.push(s);
while(!q.empty())
{
node z=q.front();
q.pop();
int xx=z.x,yy=z.y;
if(!row[xx])
{
row[xx]=1;
for(int i=1;i<=m;i++)
{
if(g[xx][i]=='1')//如果没引爆过,就加入队列,准备引爆
q.push({xx,i});
}
}
if(!col[yy])
{
col[yy]=1;
for(int i=1;i<=n;i++)
{
if(g[i][yy]=='1')
q.push({i,yy});
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
scanf("%s",g[i]+1);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(g[i][j]=='1'&&!row[i]&&!col[j])
{
bfs({i,j});
cnt++;
}
}
}
cout<<cnt;
return 0;
}