描述

由于最近的一场雨,农夫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. linux 测试机器端口连通性方法

    转至:https://blog.csdn.net/z1134145881/article/details/54706711 几种常用方法 下面一一介绍: 1 telnet方法 2 wget方法 3 s ...

  2. Java课程设计---浏览学生(实现根据姓名查询)

    1.修改窗口 2.在StudentDao中增加根据姓名查找的方法 public List<Student> getStudent(String name)throws SQLExcepti ...

  3. Go之Logrus用法入门

    Go之Logrus用法入门 Logrus是Go (golang)的结构化日志程序,完全兼容标准库的API日志程序. Logrus is a structured logger for Go (gola ...

  4. Chaoter07 面向对象 (Object)

    目录 Chapter07 面向对象 7.1 类与对象 7.1.1 对象在内存中的存在形式 (重要) 7.1.2 属性 / 成员变量 7.1.3 类与对象的内存分配机制(重要) Object03 Obj ...

  5. kube-scheduler源码分析(3)-抢占调度分析

    kube-scheduler源码分析(3)-抢占调度分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作,具 ...

  6. 『现学现忘』Docker常用命令 — 19、容器常用命令(一)

    目录 1.新建并启动容器 2.列出当前所有正在运行的容器 3.退出容器 4.启动容器 5.重启容器 6.停止容器 7.强制停止容器 8.删除已停止的容器 有镜像才能创建容器,这是根本前提. 我们下载一 ...

  7. Java 8 + 10 = Java 18

    明天Java 18将正式发布, 虽然它不是长期支持 (LTS) 版本,但它却实现了九个 JEP(在Java 18列出).有哪些特性值得关注呢?今天胖哥为你提前解读.再看.点赞.转发.关注来一波吧. J ...

  8. Numpy库基础___四

    Numpy数据存取 •数据的csv文件的存取 只能有效存取和读取一维和二维数据 a = np.arange(100).reshape(5,20) #用delimiter分割,默认为空格 np.save ...

  9. 【SEED Labs】TCP Attacks Lab

    Lab Overview 实验环境下载:https://seedsecuritylabs.org/Labs_16.04/Networking/TCP_Attacks/ 本实验涵盖以下课题: • TCP ...

  10. Zwibbler—前端Canvas绘图工具使用记录

    本人第一次发博客,用意在于记录自己在开发过程中用到的实用工具并分享出来,写的可能不好,请大家多多包涵!!! 工具官网:https://www.zwibbler.com 基于Canvas的一个前端绘画工 ...