[问题描述]
一个nm的方格图,一些格子被涂成了黑色,在方格图中被标为1,白色格子标为0.问有多少个四连通的黑色格子连通块。 四连通的黑色格子连通块指的是一片由黑色格子组成区域,其中的每个黑色格子能通过四连通的走法(上下左右),只走黑色格子,到达该联通块中的其它黑色格子。
[输入]
第一行两个整数n,m(1<=n,m<=100),表示一个nm的方格图.
接下来n行,每行m个整数,分别为0或1,表示这个格子是黑色还是白色。
[输出]
只有一行,一个整数ans,表示图中有ans个黑色格子连通块.
int a[110][110],q[110][2];//a数组存储所输入的黑格子,这里定义为全局方便直接函数调用
int n,m;
int flag[4][2]={
{0,1},{0,-1},{1,0},{-1,0}};//相邻的四个黑格子
bool p[110][110];//p数组用来判断这个黑格子是否被搜索过
void bfs(int x,int y)
{
int front=0,rear=2;
q[1][0]=x;//将新搜索到的点保存到q数组
q[1][1]=y;
while(front<rear-1)//front为队头,rear为队尾
{
front++;
x=q[front][0];
y=q[front][1];
for(int i=0;i<4;i++)
{
int x1=x+flag[i][0];//(x1,y1)就是(x,y)的相邻的点
int y1=y+flag[i][1];
if(x1<1 || x1>n || y1>m || y1<1 || !a