/*
* counting sheeps
* mike-w
* 2012-4-30
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 题目描述很有意思 :)
* 为什么失眠?本人缺觉==!
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_SIZE 128
#define Q_SIZE (MAX_SIZE*4)
char f[MAX_SIZE][MAX_SIZE];
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int T,H,W;
int que[Q_SIZE][2],qhead,qtail,qlen;
int enque(int x, int y)
{
if(qlen==Q_SIZE)
return -1;
qlen++;
que[qtail][0]=x;
que[qtail][1]=y;
qtail=(qtail+1)%Q_SIZE;
return 0;
}
int deque(int *x, int *y)
{
if(qlen==0)
return -1;
qlen--;
*x=que[qhead][0];
*y=que[qhead][1];
qhead=(qhead+1)%Q_SIZE;
return 0;
}
int search(int x, int y)
{
qhead=qtail=qlen=0;
enque(x,y);
f[x][y]='.';
int x1,x2,y1,y2,i;
while(deque(&x1,&y1)!=-1)
{
for(i=0;i<4;i++)
{
x2=x1+dir[i][0];
y2=y1+dir[i][1];
if(x2>=0 && x2<H && y2>=0 && y2<W && f[x2][y2]=='#')
{
enque(x2,y2);
f[x2][y2]='.';
}
}
}
return 0;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("in","r",stdin);
#endif
scanf("%d",&T);
int i,j,count;
while(T-->0)
{
scanf("%d%d",&H,&W);
for(i=0;i<H;i++)
scanf("%s",f[i]);
count=0;
for(i=0;i<H;i++)
for(j=0;j<W;j++)
if(f[i][j]=='#')
search(i,j),count++;
printf("%d\n",count);
}
return 0;
}
HDU-2952 BFS
最新推荐文章于 2021-07-16 11:40:19 发布