毕业后,Vegetable在一家建筑公司找到了工作。他所在的城市将要进行整修,要求把所有空地修成公园。
市区是一个N*M的矩形,Vegetable拿到了该市的地图,现在判断共要修几处公园?
注意:在一片空地上,它上下左右的位置是空地,则视为统一片空地。
输入
共有T组测试数据,每组测试数据包含一组N和M(0
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
int n,m;
int s[110][110];
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
void dfs(int x,int y){
s[x][y] = 1;
for (int i = 0; i <4; ++i){
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && s[nx][ny] == 0)
dfs(nx,ny);
}
return ;
}
int main(){
int t;
scanf("%d",&t);
while (t--){
scanf("%d%d",&n,&m);
memset(s,0,sizeof(s));
for (int i = 0; i < n; ++i){
for (int j= 0 ; j < m ;++j){
scanf("%d",&s[i][j]);
}
}
int cnt = 0;
for (int i = 0; i < n ; ++i){
for (int j = 0; j < m ; ++j){
if (s[i][j] == 0){
dfs(i,j);
cnt+=1;
}
}
}
printf("%d\n",cnt);
}
return 0;
}