http://icpc.upc.edu.cn/problem.php?cid=1404&pid=19
#include<bits/stdc++.h>
#include<queue>
#include<iostream>
using namespace std;
struct str
{
int x, y;
};
queue<str>q;
int ans,i,j,d[4][2] = { {0,1},{0,-1},{1,0},{-1,0} },a[1000][1000],m,n;
void bfs()
{
while (!q.empty())
{
int x1 = q.front().x, y1 = q.front().y;
q.pop();
for (int i = 0; i < 4; i++)
{
int x2 = x1 + d[i][0], y2 = y1 + d[i][1];
if (x2 >= 1 && y2 >= 1&& x2 <= m && y2 <= n && a[x2][y2] != 0)
{
q.push(str{ x2,y2 });
a[x2][y2] = 0;
}
}
}
}
int main()
{
scanf("%d%d",&m,&n);
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
scanf("%1d",&a[i][j]);
for (i = 1; i <= m; i++)
{
for (j = 1; j <= n; j++)
{
if (!a[i][j])
continue;
q.push(str{ i,j });
ans++;
a[i][j] =0;
bfs();
}
}
printf("%d\n",ans);
}