描述

由于最近的一场雨,农夫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的更多相关文章

随机推荐

  1. Windows server 2008 R2 多用户远程桌面配置详解(超过两个用户)

    转至:https://www.jb51.net/article/139542.htm 注意:一下是针对win2008  server r2的操作 1. 创建三个本地管理员测试用户 user01 use ...

  2. Oracle 11g RAC运维总结

    转至:https://blog.csdn.net/qq_41944882/article/details/103560879 1 术语解释1.1 高可用(HA)什么是高可用?顾名思义我们能轻松地理解是 ...

  3. Java课程设计---WindowBuilder插件安装

    1 .获取插件地址 WindowBuilder 地址http://www.eclipse.org/windowbuilder/download.php 打开网址后会看到如下 2.在线方式安装插件 根据 ...

  4. Pandas:各种错误

    1.输出为CSV文件时,Permission denied 原因可能是: (1).构建DataFrame时没有写index参数 (2).用Dict构建最开始的数据时,value没有写成List的形式, ...

  5. Ubutun:镜像网站

    中科大镜像站(地址:安徽):http://mirrors.ustc.edu.cn清华大学镜像站:http://mirrors.tuna.tsinghua.edu.cn浙江大学镜像站:http://mi ...

  6. Azure DevOps 介绍

    伴随着敏捷的遍地开花,如今各个开发团队越来越希望可以实现敏捷在自己团队内的落地,但是往往单纯的依赖人力难以实现敏捷的各个环节的管理, 大家开始渐渐的意识到,为了按时交付软件产品和服务,开发和运营工作必 ...

  7. 简单认识java enum枚举

    什么是枚举 枚举是java5中新增的特性,他是一个特殊的数据类型,他的特殊性在于他既是一种类类型,又比类类型多了安全性,简洁性,便捷性.java枚举类型是功能十分强大齐全的类,功能比其他语言中的对等物 ...

  8. Python 基于 selenium 实现不同商城的商品价格差异分析系统

    1. 前言 selenium 原本是一款自动化测试工具,因其出色的页面数据解析和用户行为模拟能力而常用于爬虫程序中,致使爬虫程序的爬取过程更简单.快捷. 爬虫程序与其它类型程序相比较,本质一样,为数据 ...

  9. 与Flash 中国特供版斗智斗勇

    我的Windows 有OEM和学校KMS 的正版,Office 365 年年续费,QQ音乐腾讯视频哔哩哔哩月月开会员,软件游戏都从Play 商店和Steam 上购买.但是Adobe 这个垃圾合作,终于 ...

  10. Docker——网络

    docker0 查看主机的ip [root@iZwz908j8pbqd86doyrez5Z test]# ip addr #本机回环地址 1: lo: <LOOPBACK,UP,LOWER_UP ...