水流(water)(BFS)(DFS)
水流(water)
时间限制: 1 Sec 内存限制: 64 MB
提交: 9 解决: 2
[提交][状态][讨论版]
题目描述
全球气候变暖,小镇A面临水灾,于是你必须买一些泵把水抽走。泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里。 小镇可以认为是N×M的矩阵,矩阵里的每个单元格都是一个a~z小写字母,该小写字母表示该格子的高度,字母大的表示该单元格比较高,反之表示该格子高度 比较低。当前单元格的水可以流到上、下、左、右四个格子,但必须满足这些格子的高度是小于或者等于当前格子的高度。现在,给你一些NXM的矩阵,你至少要 买多少个泵,才能把所有格子的水都抽走?
输入
多组测试数据。
第1行:K,表示有K组测试数据,1≤K≤5。
接下来有K组测试数据,每组测试数据格式如下:
第1行:两个正整数,N,M。1≤N,M≤50,表示小镇的大小。
接下来有N行,每行有M个小写字母,表示小镇的地图。
输出
共K行,每行对应一组数据。至少要买多少个泵,才能把所有格子的水都抽走。
样例输入
2 5 5 ccccc cbbbc cbabc cbbbc ccccc 4 9 cbabcbabc cbabcbabc cbabcbabc cbabcbabc
样例输出
1 2 【分析】我是用BFS写的,从z遍历到a,我们实验室有位大神用DFS过了一发,不过时间比我长,下面是两段AC代码。
#include <iostream> #include <cstring> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <time.h> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #define inf 0x3f3f3f3f #define mod 1000000007 typedef long long ll; using namespace std; const int N=55; int n,dp[N],len; string w[N]; int vis[N][N]; int m,t; int d[4][2]={1,0,0,1,-1,0,0,-1}; set<int>p; int minn=inf; struct man {int x,y;int st; }; queue<man>q; void bfs(int aa,int bb,char ch) { man s;s.x=aa;s.y=bb;s.st=ch;q.push(s); vis[aa][bb]=1; while(!q.empty()) {man t=q.front();q.pop();for(int i=0;i<4;i++){int xx=t.x+d[i][0],yy=t.y+d[i][1];if(xx>=0&&xx<n&&yy>=0&&yy<m&&w[xx][yy]>=t.st&&vis[xx][yy]==0){man k;k.x=xx;k.y=yy;k.st=w[xx][yy];vis[xx][yy]=1;q.push(k);}} } }int main() {cin>>t;while(t--) {int ans=0;while(!q.empty())q.pop();memset(vis,0,sizeof(vis));cin>>n>>m;for(int i=0; i<n; i++)cin>>w[i];for(char ch='a'; ch<='z'; ch++) {for(int i=0; i<n; i++) {for(int j=0; j<m; j++) {if(w[i][j]==ch&&vis[i][j]==0){ans++;bfs(i,j,ch);}}}}cout<<ans<<endl;}return 0; }
BFS
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<vector> #include <climits> #include <map> using namespace std; const int MAXN = 53; int N, M; char maze[MAXN][MAXN]; char s[MAXN][MAXN]; int xi[] = {0, 0, -1, 1}; int yi[] = {1, -1, 0, 0}; void dfs(int x, int y) {s[x][y] = 1;for(int i = 0; i < 4; i++) {int nx = x + xi[i];int ny = y + yi[i];//printf("%d %d %c\n", nx, ny,maze[nx][ny]);if(nx>=0 && nx < N && ny >= 0 && ny < M && s[nx][ny] == 0 && maze[nx][ny] >= maze[x][y]) {dfs(nx, ny);}} } int main() {int t = 0;scanf("%d", &t);while(t--) {scanf("%d%d", &N, &M);for(int i = 0; i < N; i++) {scanf("%s", maze[i]);}memset(s, 0, sizeof(s));int cnt = 0;for(char c = 'a'; c <= 'z'; c++) {for(int i = 0; i < N; i++) {for(int j = 0; j < M; j++) {if(s[i][j] == 0 && maze[i][j] == c){dfs(i, j);cnt++;}}}}printf("%d\n", cnt);}return 0; }
DFS
转载于:https://www.cnblogs.com/jianrenfang/p/5722569.html
水流(water)(BFS)(DFS)相关推荐
- 程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)
1. 题目 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度. 若值为0则表示水域.由垂直.水平或对角连接的水域为池塘. 池塘的大小是指相连接的水域的个数. 编写 ...
- 邻结矩阵的建立和 BFS,DFS;;
邻结矩阵比较简单,, 它的BFS,DFS, 两种遍历也比较简单,一个用队列, 一个用数组即可!!!但是邻接矩阵极其浪费空间,尤其是当它是一个稀疏矩阵的时候!!!-------------------- ...
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)
文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...
- LeetCode 1034. 边框着色(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...
- 全局路径规划:图搜索算法介绍1(BFS/DFS)
对于全局路径规划的设计,我们先要了解什么是图搜索,在此之前,要先知道什么是图: 可以看到,图有很多种,有无向图,有向图,节点之间还可以有不同的weight, 用于表述从节点与节点直接迁移的代价. 而图 ...
- 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...
java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...
- 【八数码问题】基于状态空间法的知识表示与状态搜索:无信息搜索(BFS/DFS) 启发式搜索(A*)
前言 一.问题引入 二.状态空间法 1. 知识及其表示 2. 状态空间法定义 3. 问题求解 三.基于状态空间搜索法解决八数码问题 1. 八数码问题的知识表示 2. 状态空间图搜索 1. 无信息搜索 ...
- bfs dfs 搜索入门模板题
bfs & dfs 题目链接:https://vjudge.net/contest/404511 1.最短路(bfs) (1)一维最短路 D - Catch That Cow 题目大意: 在一 ...
最新文章
- 增强CNN学习能力的Backbone:CSPNet
- KVM中I/O设备直接分配和SR-IOV(十六)
- oracle 按日输出 取整数,Oracle按日周月分組統計,及next_day()函數詳解
- using 指令是不需要的和其他两个C#错误
- 卖软件源码、解决技术难题、做生意,都需要讲个基本原则【No Money No Code】
- web设计师和前端设计师的互动—前端工程师应该具备的三种思维
- SAP gateway 后台OData model data查看工具
- 用于基于SWT的应用程序的RichText编辑器组件
- Xamarin.Forms Button长按事件
- 洛谷 P4549 【模板】裴蜀定理
- 论剑乌镇:历届互联网大会热词盘点
- springboot踩过的坑
- python开发板卡驱动开发_一款能让你发挥无限创意的MicroPython开发板—TPYBoard开发板测...
- 独门绝技:一招克死所有病毒(转贴,没有用过)
- CoreBluetooth Central模式 Swift版
- 达梦安装与基本使用【进阶】
- 天气预报接口api(中国天气网)
- CATIA二次开发——元素隐藏
- Win10连接NAS网络存储器失败解决方法
- 【我的OpenGL学习进阶之旅】什么是PVR文件以及如何打开它?
热门文章
- 程序人生--拍婚纱照经历小记
- 箱线图怎么看_股票000882:怎么看月k线图「歙县股票网」
- 二进制反码求和java_简单又复杂的“整数类型”
- flash按钮html层遮罩
- matlab显示全球海岸线
- springboot毕设项目小区废弃物分类管理系统cf53s(java+VUE+Mybatis+Maven+Mysql)
- 第三方注解框架,黄牛刀.使用步骤和方法
- 人机工程学产品设计案例_儿童产品设计的那些原则【北京新易设计坊】
- 世界上最难弹奏的十首钢琴曲
- 计算机3d数字游戏是什么专业,天津电子信息职业技术学院获3D数字游戏艺术赛项一等奖...