又是一道简单的DFS。。。没有剪枝
#include<iostream>
using namespace std;
int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int t,n,m,sum;
char str[105][105];
void dfs(int x,int y){
int dx,dy;
str[x][y] = '.';
for(int k = 0;k<4;k++){
dx = x + dir[k][0];
dy = y + dir[k][1];
if(str[dx][dy] == '#' && dx>=0 && dx<n && dy>=0 && dy<m)
dfs(dx,dy);
}
}
int main(){
while(~scanf("%d",&t)){
while(t--){
sum = 0;
scanf("%d %d",&n,&m);
getchar();
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
scanf("%c",&str[i][j]);
}
getchar();
}
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
if(str[i][j] == '#'){
sum++;
dfs(i,j);
}
}
}
printf("%d\n",sum);
}
}
return 0;
}