全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++ 数据结构之水洼的数量算法

C++ 数据结构之水洼的数量算法

题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被认为是连接在一起的. 请求出园子里总共有多少水洼.

使用深度优先搜索(DFS), 在某一处水洼, 从8个方向查找, 直到找到所有连通的积水. 再次指定下一个水洼, 直到没有水洼为止.
则所有的深度优先搜索的次数, 就是水洼数. 时间复杂度O(8*M*N)=O(M*N).

代码:

/* 
 * main.cpp 
 * 
 * Created on: 2014.7.12 
 *本栏目更多精彩内容:http://www.bianceng.cn/Programming/sjjg/
 *   Author: spike 
 */
   
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
   
class Program { 
  static const int MAX_N=20, MAX_M=20; 
  int N = 10, M = 12; 
  char field[MAX_N][MAX_M+1] = { 
      "W........WW.", 
      ".WWW.....WWW", 
      "....WW...WW.", 
      ".........WW.", 
      ".........W..", 
      "..W......W..", 
      ".W.W.....WW.", 
      "W.W.W.....W.", 
      ".W.W......W.", 
      "..W.......W."}; 
  void dfs(int x, int y) { 
    field[x][y] = '.'; 
    for (int dx = -1; dx <= 1; dx++) { 
      for (int dy = -1; dy <= 1; dy++) { 
        int nx = x+dx, ny = y+dy; 
        if (0<=dx&&nx<N&&0<=ny&&ny<=M&&field[nx][ny]=='W') dfs(nx, ny); 
      } 
    } 
    return; 
  } 
public: 
  void solve() { 
    int res=0; 
    for (int i=0; i<N; i++) { 
      for (int j=0; j<M; j++) { 
        if (field[i][j] == 'W') { 
          dfs(i,j); 
          res++; 
        } 
      } 
    } 
    printf("result = %d\n", res); 
  } 
}; 
   
   
int main(void) 
{ 
  Program P; 
  P.solve(); 
  return 0; 
}

输出:

result = 3

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 数据结构之水洼的数量算法  # 数据结构  # 水洼数量  # C++数据结构与算法之哈夫曼树的实现方法  # C++数据结构与算法之反转链表的方法详解  # C++数据结构与算法之双缓存队列实现方法详解  # C++ 数据结构之kmp算法中的求Next()函数的算法  # C++数据结构与算法之判断一个链表是否为回文结构的方法  # C++ 冒泡排序数据结构、算法及改进算法  # C++数据结构与算法的基础知识和经典算法汇总  # 求出  # 有多少  # 希望能  # 谢谢大家  # 本栏目  # 雨后  # 有一个  # 在某一  # 园子里  # cn  # bianceng  # www  # spike  # http  # lt  # include  # Author  # Programming  # sjjg 


相关文章: 如何快速生成橙子建站落地页链接?  如何选择高效响应式自助建站源码系统?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  常州企业网站制作公司,全国继续教育网怎么登录?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何在腾讯云服务器上快速搭建个人网站?  长沙做网站要多少钱,长沙国安网络怎么样?  网站代码制作软件有哪些,如何生成自己网站的代码?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  济南企业网站制作公司,济南社保单位网上缴费步骤?  如何通过VPS建站实现广告与增值服务盈利?  如何在IIS中新建站点并配置端口与物理路径?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  建站之星后台密码遗忘如何找回?  建站之星导航菜单设置与功能模块配置全攻略  广州商城建站系统开发成本与周期如何控制?  建站上传速度慢?如何优化加速网站加载效率?  ppt制作免费网站有哪些,ppt模板免费下载网站?  安徽网站建设与外贸建站服务专业定制方案  宝塔建站无法访问?如何排查配置与端口问题?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  模具网站制作流程,如何找模具客户?  制作网页的网站有哪些,电脑上怎么做网页?  Swift中switch语句区间和元组模式匹配  外贸公司网站制作哪家好,maersk船公司官网?  如何通过西部数码建站助手快速创建专业网站?  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  Swift中swift中的switch 语句  相册网站制作软件,图片上的网址怎么复制?  江苏网站制作公司有哪些,江苏书法考级官方网站?  家具网站制作软件,家具厂怎么跑业务?  测试制作网站有哪些,测试性取向的权威测试或者网站?  定制建站哪家更专业可靠?推荐榜单揭晓  导航网站建站方案与优化指南:一站式高效搭建技巧解析  青浦网站制作公司有哪些,苹果官网发货地是哪里?  深圳网站制作案例,网页的相关名词有哪些?  宝塔新建站点为何无法访问?如何排查?  宝塔Windows建站如何避免显示默认IIS页面?  c# 服务器GC和工作站GC的区别和设置  建站之星如何防范黑客攻击与数据泄露?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  如何设计高效校园网站?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  开源网站制作软件,开源网站什么意思?  建站之星代理如何优化在线客服效率?  制作表格网站有哪些,线上表格怎么弄?  如何在阿里云虚拟服务器快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。