poj_2386_dfs
描述
由于最近的一场雨,农夫john的田地里很多地方流入了水,由一个N*M的矩形表示。每个方格要么有水(W)要么是干的(.)。农夫想要知道他的田地里形成了多少池塘。 一个池塘由有水的方块相连,每个方块8连通。
思路
对于每个点,8个方向深搜。
属于同一个池塘的点不必重复搜索,因此可以用一个二维数组存放每个点是否被访问过的状态。(记忆化搜索)
代码
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5
6
7 int f[102][102], vis[102][102];
8 int N, M;
9
10 void read(int a[102][102],int n,int m)
11 {
12 for (int i = 0; i < n; i++)
13 {
14 char str[105];
15 scanf("%s", str);
16 for (int j = 0; j < m; j++)
17 if (str[j] == 'W')
18 f[i][j] = 1;
19
20 }
21 }
22
23 void dfs(int i, int j)
24 {
25 if (vis[i][j]||!f[i][j])return;
26 if (i < 0 || i >= N || j < 0 || j >= M)return;
27
28 vis[i][j] = 1;
29
30 dfs(i - 1, j - 1);
31 dfs(i - 1, j);
32 dfs(i - 1, j + 1);
33 dfs(i, j - 1);
34 dfs(i, j + 1);
35 dfs(i + 1, j - 1);
36 dfs(i + 1, j);
37 dfs(i + 1, j + 1);
38
39 }
40
41 int main()
42 {
43 //freopen("C:\\Users\\zgwng\\Desktop\\1852.txt", "r", stdin);
44 scanf("%d %d", &N, &M);
45
46 memset(f, 0, sizeof(f));
47 memset(vis, 0, sizeof(vis));
48 int pound = 0;
49
50 read(f, N, M);
51
52 for(int i=0;i<N;i++)
53 for (int j = 0; j < M; j++)
54 {
55 if (f[i][j] && !vis[i][j])
56 {
57 pound++;
58 dfs(i, j);
59 }
60 }
61
62 cout << pound << endl;
63
64 return 0;
65
66 }
poj_2386_dfs的更多相关文章
随机推荐
- 爬虫之Scrapy框架介绍及基础用法
今日内容概要 爬虫框架之Scrapy 利用该框架爬取博客园 并发编程 今日内容详细 爬虫框架Scrapy 1.什么是框架? 框架类似于房子的结构,框架会提前帮你创建好所有的文件和内部环境 你只需要往对 ...
- Cache写机制
Cache 写机制分为:Write-through和Write-back Write-through(直写模式) 定义:在数据更新时,同时写入缓存Cache和后端存储(主存): 优点:操作简单: 缺点 ...
- LeetCode-047-全排列 II
全排列 II 题目描述:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链接:https://lee ...
- 泛型的类型擦除后,fastjson反序列化时如何还原?
原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra~ 在前面的文章中,我们讲过Java中泛型的类型擦除,不过有小伙伴在后台留言提出了一个问题,带有泛型的实体的反序列化 ...
- Vue基础知识的巩固与学习
生命周期的解析和应用: Vue 实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期.通俗说就是 Vue 实 ...
- 如何取消 UIView 动画?
原文链接 最近项目中有一个需求是需要手动点击相机对焦,这里由于相机对焦部分需要一个类似于系统对焦框一样的缩放动画,同时动画时长为0.3秒,因此这里就有一个很普遍的需求,如果用户在0.3秒内继续点击对焦 ...
- 2022年官网下安装MongoDB最全版与官网查阅方法(5.0.6)
一.下载安装 1.百度搜索,找到官网,或直接访问:https://www.mongodb.com/ 2.寻找下载位置,双击下载. 3.找到本地位置,双击执行,进入欢迎界面,选择next. 4.勾选协议 ...
- 2022年官网下安装MAVEN最全版与官网查阅方法
目录 确保JDK安装无误 一.百度输入关键字maven,选择官网,进入官网 二.找到下载位置,如图所示,双击进入 三.找到下载位置(下载的是安装包bin版本的,src是源码查看),双击下载 四.弹出保 ...
- 说说如何安装 Openfire
Openfire 是一个基于 XMPP 协议的 IM 服务框架.这里我们来说一说如何安装它. 1 下载 zip 安装包 首先下载 Openfire 安装包,下载路径为:http://www.ignit ...
- Mybatis——动态sql+字符串匹配导致的判断问题
在mybatis的学习中,狂神建议字符串匹配直接将模糊匹配的符号放在字符串中,如:匹配'keWord',那么实际所使用的参数应该为'%keyWord%' map.put("keyWord&q ...