深度搜索DFS-Lake Counting(POJ NO.2386)
题目链接POJ NO.2386
解题思路:
这个也是一个dfs 的应用,在书上的例子,因为书上的代码并不全,基本都是函数分块来写,通过这个题目也规范了代码,以后能用函数的就都用函数
来实现吧。采用深度优先搜索
,从任意的w开始,不断把邻接的部分用'.'代替
,1次DFS后与初始这个w连接的所有w就全都被替换成'.',因此直到图中不再存在W为止,总共进行DFS的次数
就是答案。8个
方向对应8个状态转移,每个格子作为DFS的参数最多调用一次,因此时间复杂度为O(8nm)=O(nm)。
AC 代码:
#include <iostream>
#include<cstdio>
using namespace std;
#define maxn 105
char field[maxn][maxn];//园子
int n, m;
void dfs(int x, int y)
{ //将现在所在位置替换为.
field[x][y] = '.';
//循环遍历八个方向
for (int dx = -1; dx <= 1; dx++)
{//向x方向一定dx,向y方向移动dy,移动结果为(nx,ny)
for (int dy = -1; dy <= 1; dy++)
{
int nx = x + dx, ny = y + dy;//x,y 都是原来的坐标
//判断(nx,ny)是否在园子里,以及是否有积水
if (0 <= nx&&nx<n && 0 <= ny&&ny<m&&field[nx][ny] == 'W')
{
dfs(nx, ny);
}
}
}
}
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("%d\n", res);
}
int main()
{
scanf("%d%d", &n, &m);//n是行,m是列
for (int i = 0; i<n; i++) //仅仅是一个二维数组的输入
{
for (int j = 0; j<m; j++)
{
cin >> field[i][j];
}
}
solve();//这样写很好,函数分块
return 0;
}
通过这个题目进一步加深了对dfs算法的理解,最重要的是以后可以很好的还原书上的代码(开心),只要用一个main 函数把基本的输入格式弄好就好了,自己还是很弱啊,继续加油吧
深度搜索DFS-Lake Counting(POJ NO.2386)的更多相关文章
- Lake Counting (POJ No.2386)
有一个大小为N*M的园子,雨后积起了水,八连通的积水被认为是链接在一起的求出园子里一共有多少水洼? *** *W* *** /** *进行深度优先搜索,从第一个W开始,将八个方向可以到达的 W修改为 ...
- DFS:Lake Counting(POJ 2386)
好吧前几天一直没更新博客,主要是更新博客的确是要耗费一点精力 北大教你数水坑 最近更新博客可能就是一点旧的东西和一些水题,主要是最近对汇编感兴趣了嘻嘻嘻 这一题挺简单的,没什么难度,简单深搜 #inc ...
- Lake Counting(poj 2386)
题目描述: Description Due to recent rains, water has pooled in various places in Farmer John's field, wh ...
- Lak3 Counting(POJ No.2386)
问题描述: 有个大小为N*M的园子,雨后积起了水.八连通的积水被认为是连接在一起的.求出园子里总共有多少水洼. N, M <= 100 输入例: : 问题分析: 八连通即:上.左上.左,左下,下 ...
- 深度优先搜索初尝试-DFS-LakeCounting POJ No.2386
DFS入门的一道经典题目:LakeCounting 用栈或队列来实现: #include<cstdio> #include<stdlib.h> #include<iost ...
- Word Search(深度搜索DFS,参考)
Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...
- 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)
走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...
- DFS----Lake Counting (poj 2386)
Lake Counting(POJ No.2386) Description Due to recent rains, water has pooled in various places in Fa ...
- poj 2386:Lake Counting(简单DFS深搜)
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18201 Accepted: 9192 De ...
随机推荐
- P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
题目描述 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 输入格式: Line 1: N and W separated by a spa ...
- Grafana+Prometheus系统监控之SpringBoot
前言 前一段时间使用SpringBoot创建了一个webhook项目,由于近期项目中也使用了不少SpringBoot相关的项目,趁着周末,配置一下使用prometheus监控微服务Springboot ...
- angularJS的一些用法
AngularJS 事件指令: ng-click/dblclick ng-mousedown/up ng-mouseenter/leave ng-mousemove/over/out ng-keydo ...
- gulp基础操作实践
按照gulp中文文档对gulp基础操作的一些实践练习,记录以防忘掉. 一,选择并输出文件:gulp.src(globs[,options]) eg:gulp.src('src/less/index.l ...
- Hangfire在ASP.NET CORE中的简单实现
hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNe ...
- springboot + redis缓存使用
[参照资料] 1.spring boot 官网文档 2.https://www.cnblogs.com/gdpuzxs/p/7222309.html [项目结构] [pom.xml配置] <?x ...
- Qt颜色下拉框
上周为了用Qt写一个类似颜色下拉框的东西,查阅了网上的多数相关资料,依然没有我想要的.终于在周四的时候下定决心重写QCombobox类来实现功能,现在把它贴出来,望看到的人,批评指正.废话不多说,先上 ...
- NodeJS网络爬虫
原文地址:NodeJS网络爬虫 网上有很多其他语言平台版本的网络爬虫,比如Python,Java.那怎么能少得了我们无所不能的javascript呢
- spring框架的一些技术总结
纵观现在互联网行业,java的地位依然不可动摇,因为java拥有着的众多开发人员和适用性广,技术与解决技术大部分开源等特点,因此java依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...
- 如果Centos没有桌面,怎么修改IP地址
修改前备份!!! 修改前备份!!! 修改前备份!!! [PHP] 纯文本查看 复制代码 ? 1 vi /etc/sysconfig/network-scripts/ifcfg-eth0 编辑,输入以下 ...