C++ 数据结构之水洼的数量算法
发布时间 - 2026-01-11 02:02:29 点击率:次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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
MySQL查询结果复制到新表的方法(更新、插入)
如何在IIS服务器上快速部署高效网站?
七夕网站制作视频,七夕大促活动怎么报名?
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
如何用景安虚拟主机手机版绑定域名建站?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
利用vue写todolist单页应用
如何有效防御Web建站篡改攻击?
Laravel集合Collection怎么用_Laravel集合常用函数详解
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理
javascript中的try catch异常捕获机制用法分析
如何在Ubuntu系统下快速搭建WordPress个人网站?
网页设计与网站制作内容,怎样注册网站?
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
高端云建站费用究竟需要多少预算?
浅谈redis在项目中的应用
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何用腾讯建站主机快速创建免费网站?
javascript基于原型链的继承及call和apply函数用法分析
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
深圳网站制作的公司有哪些,dido官方网站?
如何安全更换建站之星模板并保留数据?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
微信小程序 HTTPS报错整理常见问题及解决方案
iOS中将个别页面强制横屏其他页面竖屏
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何自定义建站之星网站的导航菜单样式?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
高端网站建设与定制开发一站式解决方案 中企动力
历史网站制作软件,华为如何找回被删除的网站?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
如何在万网ECS上快速搭建专属网站?
如何快速登录WAP自助建站平台?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
Laravel如何自定义分页视图?(Pagination示例)
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何用低价快速搭建高质量网站?
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何用AWS免费套餐快速搭建高效网站?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
微信小程序 配置文件详细介绍

