题目描述
毕业后,Vegetable在一家建筑公司找到了工作。他所在的城市将要进行整修,要求把所有空地修成公园。
市区是一个N*M的矩形,Vegetable拿到了该市的地图,现在判断共要修几处公园?
注意:在一片空地上,它上下左右的位置是空地,则视为统一片空地。
输入
共有T组测试数据,每组测试数据包含一组N和M(0
#include <cstdio>
#include <cstring>
#include <queue>
#include <stack>
#include <cmath>
#include <algorithm>
using namespace std;
int mapp[105][105];
int x[4]={1,-1,0,0};
int y[4]={0,0,1,-1};
int h,w;
void dfs(int a,int b)
{
if(a<0||a>=h||b<0||b>=w||mapp[a][b]==1)
return ;//什么都不返回。
mapp[a][b]=1;//把原来为0的地方变成1,然后继续搜索。
for(int i=0;i<4;i++)
{
int na=a+x[i];
int nb=b+y[i];
dfs(na,nb);
}
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
memset(mapp,0,sizeof(mapp));//把从mapp到sizeof(mapp)之前全部变成“0”。
scanf("%d%d",&h,&w);
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
scanf("%d",&mapp[i][j]);
}
}
int sum=0;
for(int i=0;i<h;i++)
{
for(int j=0;j<w;j++)
{
if(mapp[i][j]==0)
{
dfs(i,j);
sum++;//前面把搜索过的“0”变成了“1”,所以不会重复。
}
}
}
printf("%d\n",sum);
}
return 0;
}