题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2952
#include <cstdio>
#include <cstring>
int H,W;
char map[101][101];//地图
int book[101][101];//标记
int next[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方向
void dfs(int x,int y)
{
int tx,ty,k;
for(k = 0; k < 4; ++k)
{
tx = x + next[k][0];
ty = y + next[k][1];
if(tx < 1 || ty < 1 || tx > H || ty > W)//判断是否越界
continue;
if(map[tx][ty] == '#' && book[tx][ty] == 0)
{
book[tx][ty] = 1;
dfs(tx,ty);
}
}
return ;
}
int main()
{
int T;
int sum;
int i,j;
scanf("%d",&T);
while(T--)
{
sum = 0;
scanf(" %d %d",&H,&W);
memset(book,0,sizeof(book));
for(i = 1; i <= H; ++i)
for(j = 1; j <= W; ++j)
scanf(" %c",&map[i][j]);
for(i = 1;i <= H; ++i)
for(j = 1; j <= W; ++j)
if(map[i][j] == '#' && book[i][j] == 0)
{
sum++;
book[i][j] = 1;
dfs(i,j);
}
printf("%d\n",sum);
}
return 0;
}