c/c++语言开发共享dfs板子题-Hdu1283Vegetables

题目描述毕业后,Vegetable在一家建筑公司找到了工作。他所在的城市将要进行整修,要求把所有空地修成公园。 市区是一个N*M的矩形,Vegetable拿到了该市的地图,现在判断共要修几处公园? 注意:在一片空地上,它上下左右的位置是空地,则视为统一片空地。 输入共有T组测试数据,每组测试数据包含 …

题目描述
毕业后,vegetable在一家建筑公司找到了工作。他所在的城市将要进行整修,要求把所有空地修成公园。

市区是一个n*m的矩形,vegetable拿到了该市的地图,现在判断共要修几处公园?

注意:在一片空地上,它上下左右的位置是空地,则视为统一片空地。

输入
共有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

思路: 题目采用dfs,纯板子

#include<iostream>  #include<algorithm>  using namespace std;  const int maxn=110 ;  int a[maxn][maxn];  int n,m;  int ans;  void dfs(int sx,int sy)  {            if(sx<0||sx>=n||sy<0||sy>=m)//超出边界则返回           return ;          if(a[sx][sy]==1)//当前位置被遍历过或者遇到了楼房则返回           return;          a[sx][sy]=1;//当前位置标记为已遍历             dfs(sx+1,sy);      dfs(sx-1,sy);      dfs(sx,sy+1);      dfs(sx,sy-1);  }  int main()  {      int t;      cin>>t;      while(t--)      {                    cin>>n>>m;          for(int i=0;i<n;i++)          {              for(int j=0;j<m;j++)              {                  cin>>a[i][j];              }          }          ans=0;          for(int i=0;i<n;i++)          {              for(int j=0;j<m;j++)              {                  if(a[i][j]==0)                  {                      ans++;                      dfs(i,j);                  }              }          }          cout<<ans<<endl;      }            return 0;      } 

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/604746.html

(0)
上一篇 2021年5月12日
下一篇 2021年5月12日

精彩推荐