题目大意 你必须买一些泵把水抽走。泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,小镇可以认为是N * M的矩阵。矩阵里的每个单元格都是一个‘a’- ‘z’小写字母,该小写字母表示该格子的高度,字母大的表示该单元格比较高,反之,表示该格子高度比较低。当前单元格的水可以流到上、下、左、右四个格子,一共要多少个泵?

这道题目可以用搜索做,为什么呢?

我们可以把小镇当做一个地图来看*mn**的地图,我知道每一个格子的深度,我要找最深的那一个,只能用上下左右来进行寻找

我们就可以转化成,在一张n*m(个格子组成的)大小的地图中,找到最大的那一个格子。

于是我们便可以想到用dfs,但并不完全是dfs

我们可以用一个数组来保存状态,s[i][j],如果这一个格子没有被标记过(也就是没有走过),并且这个格子在我正张地图的范围之内,便可以执行我们的dfs函数 最后输出ans

在dfs函数中我们先用s[i][j]来保存当前状态, 之后再进行搜索,我们有上下左右四个方向进行移动,循环来保存新的x,y;之后再进行判断新的x与y是否再范围之内,我们的s数组是否标记过,再是判断当前位置是否离开了原位(很重要必须得离开原位),之后再将我们得到得新的x与y,进行调用,再做标记(记得要清零,标记放循环前)

其实这dfs很像递归但又像dfs。。。。

这样这道题就完成了;

上代码吧

 include<iostream>
include<cstdio>
include<cmath>
include<algorithm>
include<cstring>
using namespace std; const int maxn= ; int N, M; char maze[maxn][maxn]; char s[maxn][maxn]; int xi[] = {, , -, }; int yi[] = {, -, , }; void dfs(int x, int y) { s[x][y]=; for(int i=; i<; i++) { int nx=x+xi[i]; int ny=y+yi[i]; if(nx>=&&nx<N&& ny>=&&ny<M&&s[nx][ny]==&&maze[nx[ny]>=maze[x][y]) {
dfs(nx,ny); } }
}//一个很简单的搜索 int main() { int t=; cin>>t; while(t--) { cin>>N>>M; for(int i=;i<N;i++) { cin>>maze[i]; } memset(s,,sizeof(s)); int ans=; for(char c='a';c<='z';c++) { for(int i = ; i < N; i++) { for(int j = ; j < M; j++) { if(s[i][j] == && maze[i][j] == c){ dfs(i, j); ans++; } } } } cout<<ans<<endl;
return ;
}

【JZOJ】1341. water(水流)的更多相关文章

  1. 2019中山纪念中学夏令营-Day2[JZOJ]

    博客的开始,先聊聊代码实现: 每次比赛以后,要有归纳错误的习惯. 错误小结: 1.读入:scanf(“%c”)会读入回车和空格,但cin不会. 2.对于二维数组的输入,不能把m,n搞混了,会引起严重的 ...

  2. 水流(water)

    水流(water) 题目描述 全球气候变暖,小镇A面临水灾,于是你必须买一些泵把水抽走.泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里.小镇可以认为是N×M的矩阵 ...

  3. [Swift]LeetCode417. 太平洋大西洋水流问题 | Pacific Atlantic Water Flow

    Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...

  4. 水流(water)(BFS)(DFS)

    水流(water) 时间限制: 1 Sec  内存限制: 64 MB提交: 9  解决: 2[提交][状态][讨论版] 题目描述 全球气候变暖,小镇A面临水灾,于是你必须买一些泵把水抽走.泵的抽水能力 ...

  5. [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流

    Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...

  6. [LeetCode] 417. Pacific Atlantic Water Flow 太平洋大西洋水流

    Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...

  7. 417 Pacific Atlantic Water Flow 太平洋大西洋水流

    详见:https://leetcode.com/problems/pacific-atlantic-water-flow/description/ C++: class Solution { publ ...

  8. [LeetCode] Swim in Rising Water 在上升的水中游泳

    On an N x N grid, each square grid[i][j] represents the elevation at that point (i,j). Now rain star ...

  9. water 解题报告

    water 题目描述 有一块矩形土地被划分成\(n\times m\)个正方形小块.这些小块高低不平,每一小块都有自己的高度.水流可以由任意一块地流向周围四个方向的四块地中,但是不能直接流入对角相连的 ...

随机推荐

  1. 操作Excel模块openpyxl

    安装 pip install openpyxl 想要在文件中插入图片文件,需要安装pillow font(字体类):字号.字体颜色.下划线等 fill(填充类):颜色等 border(边框类):设置单 ...

  2. promise 的基本用法

    //知识点1 例1--- 最基本的写法 Promise的基本语法哦 const Aa=new Promise(function(resolve,reject){ //resolve和reject是参数 ...

  3. BCD解密

    #include<stdio.h> int main(void) { int num; scanf_s("%d", &num); printf( * + num ...

  4. jq序 选择器

    1.库和框架 库:小而精 直接操作DOM css() jquerry封装js的那些操作: 事件,属性, ajax(交互的技术),DOM,选择器 框架:大而全  事件,DOM,属性操作,ajax,&qu ...

  5. 解决Error: ENOENT: no such file or directory, scandir 'xxx\node-sass\vendor'

      解决方案是执行以下方法: npm rebuild node-sass

  6. python函数中的不定长参数

    python自定义函数中有两中不定长参数,第一种是*name,第二种是**name.加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数.加了两个星号 ** 的参数会以字典的 ...

  7. Github实战测试情况

    测试情况 很久没有熬夜测试程序了,经过测试,没有复现功能的有echo.葫芦娃.火鸡堂.那周余嘉熊掌将得队.为了交项目而干杯.修!咻咻!.云打印和追光的人.据汪老师反应在现场实践课程中大都能实现的,公平 ...

  8. 使用angularJS接收json数据并进行数据的显示

    1.引入JS <script type="text/javascript" src="../plugins/angularjs/angular.min.js&quo ...

  9. webpy安装

    C:\Users\ceshi>python -m pip install web.pyCollecting web.py Downloading web.py-0.38.tar.gz (91kB ...

  10. 【转载】Makedown数学公式语法

    Typora数学模块 行间表达式快捷键($$) 点击"段落"->"公式块" 快捷键Ctrl+Shift+m "$$"+回车 行内表达式 ...