```cpp
#include<iostream>
using namespace std;
int m,n,sum=0;
char array[1010][1010];
int matrix[1000][1000]; //存储a中元素是否用过
int a[1000][10]; //队列,a[tail][1]记录行,a[tail][2]记录列
int dx[5]={0,0,1}, //过河卒
dy[5]={0,1,0};
int bfs(int i,int j)
{
int head=0,tail=1,x,y;
a[1][1]=i; //hang
a[1][2]=j; //lie
matrix[i][j]=0;
do
{
head++;
for (int k=1; k<=4; k++)
{
x=a[head][1]+dx[k]; //k==1右 k==2下
y=a[head][2]+dy[k]; //刚开始错写为 a[tail][1],而实际上matrix[a[head][1][a[head][2]]就是father;本题与上题思路是一样的,处理方法不一样
//上题用b数组存父节点
if (matrix[x][y])
{
tail++;
a[tail][1]=x;
a[tail][2]=y;
matrix[x][y]=0;
}
}
}
while (head<tail); //这个<写错了啊 !!找了我半天啊
}
int main()
{
cin>>m>>n;
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
{
cin>>array[i][j];
if (array[i][j]=='0') matrix[i][j]=0; //这些数字为什么是字符型的?
else matrix[i][j]=1;
}
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
if (matrix[i][j])
{
bfs(i,j);
sum++;
}
cout<<sum;
return 0;
}
```
by 秋日私语 @ 2017-07-29 13:11:05