dfs

老王修公园 时间限制:  1 Sec   内存限制:  128 MB
提交:  32   解决:  15
[ 提交 ][ 状态 ][ 讨论版 ]

题目描述

刚刚在建筑大学毕业的老王来到JZ市工作。他接到任务要求把市区的空地全部修成公园。JZ市市区是一个N*M的矩形,老王拿到了该市的地图,现在判断共要修几处公园?注意:在一片空地上,它上下左右的位置是空地,则视为统一片空地。

输入

共有T组测试数据,每组测试数据包含一组N和M(0<n,m<=100)。分别表示市区的长和宽。接下来N行每行有M个数(1代表楼房,0代表空地)。

输出

输出要修建的公园个数。

样例输入

2
3 4
1 0 0 0 
0 0 1 1
1 1 1 0
5 5
1 1 1 1 0
0 0 1 0 1
0 0 0 0 0
1 1 1 0 0
0 0 1 1 1

样例输出

2
3
 连续为0的区域视为一片空地,找有几个不连续空地
  1. #include<stdio.h>        
  2. int n,m;    
  3. int jz[110][110];    
  4. int dx[4]={0,1,0,-1};    
  5. int dy[4]={1,0,-1,0};    
  6.     
  7. void dfs(int x,int y)    
  8. {    
  9.     if(x>=n||x<0||y>=m||y<0)    
  10.         return;    
  11.     if(jz[x][y]==0){    
  12.         jz[x][y]=1;    
  13.         for(int k=0;k<4;k++)    
  14.            dfs(x+dx[k],y+dy[k]);    
  15.     }    
  16. }    
  17.     
  18. int main()    
  19. {    
  20.     int t;    
  21.     scanf("%d",&t);    
  22.     while(t--)    
  23.     {    
  24.         int ans=0;    
  25.         scanf("%d%d",&n,&m);    
  26.         for(int i=0;i<n;i++)    
  27.             for(int j=0;j<m;j++)    
  28.             scanf("%d",&jz[i][j]);    
  29.         for(int i=0;i<n;i++){    
  30.             for(int j=0;j<m;j++)    
  31.             if(jz[i][j]==0){    
  32.                 ans++;    
  33.                 dfs(i,j);  //遍历周围的连续的空地  
  34.             }    
  35.         }    
  36.         printf("%d\n",ans);    
  37.     }    
  38.     return 0;    
  39. }    
  40.     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值