HRBUST - 1143 泉水 (简单DFS)
2018-03-28 14:35
176 查看
description
Leyni是一个地址调查员,有一天在他调查的地方突然出现个泉眼。由于当地的地势不均匀,有高有低,他觉得如果这个泉眼不断的向外溶出水来,这意味着这里在不久的将来将会一个小湖。水往低处流,凡是比泉眼地势低或者等于的地方都会被水淹没,地势高的地方水不会越过。而且又因为泉水比较弱,当所有地势低的地方被淹没后,水位将不会上涨,一直定在跟泉眼一样的水位上。由于Leyni已经调查过当地很久了,所以他手中有这里地势的详细数据。所有的地图都是一个矩形,并按照坐标系分成了一个个小方格,Leyni知道每个方格的具体高度。我们假定当水留到地图边界时,不会留出地图外,现在他想通过这些数据分析出,将来这里将会出现一个多大面积的湖。
Input
有若干组数据,每组数据的第一行有四个整数n,m,p1,p2(0Output
输出对应地图中会有多少个格子被水充满。Sample Input
3 5 2 33 4 1 5 1
2 3 3 4 7
4 1 4 1 1
Sample Output
6solution
DFS模板题,也可以使用BFS。注意于BFS差别
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int maxn = 1e3 + 10; bool vst[maxn][maxn]; int pic[maxn][maxn]; int M, N, SX, SY, ANS; int dir[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}}; bool check(int x, int y) { //注意状态检测先检测边界!如果先检测vst会有数组越界的危险 if (x > 0 && x <= M && y > 0 && y <= N && !vst[x][y] && pic[x][y] <= pic[SX][SY]) return true; return false; } void DFS(int sx, int sy) { vst[sx][sy] = true; ANS++; // 不同于BFS这里没有目标状态的检测 for (int i = 0; i < 4; i++) { //构造下一次状态 int nx = sx + dir[i][0], ny = sy + dir[i][1]; //状态检测 if (check(nx, ny)) { //直接递归,不同于BFS,不需要改变状态数组vst DFS(nx, ny); } } } int main() { // freopen("in.txt", "r", stdin); while (~scanf("%d%d%d%d", &M, &N, &SX, &SY)) { for (int i = 1; i <= M; i++) for (int j = 1; j <= N; j++) scanf("%d", &pic[i][j]); ANS = 0; memset(vst, false, sizeof(vst)); DFS(SX, SY); printf("%d\n", ANS); } return 0; }
相关文章推荐
- hrbust 1143 泉水(简单dfs)
- hrbust 1143 泉水(深搜的简单应用)
- 第二道简单深搜DFS-------------lig1143
- Hust oj 1143 泉水(dfs)
- bfs\dfs hrbust 1143
- hrbust 1174泉水(DFS深度优先搜索)
- hrbust 1143 泉水
- Hdu2952 Counting Sheep 【简单dfs】
- HDOJ 1312 Red and Black (简单dfs)
- hrbust oj 1189、线段树初探 简单应用之区间最大值、
- HDU 2616 Kill the monster(简单DFS)
- hdoj - 1258 Sum It Up && hdoj - 1016 Prime Ring Problem (简单dfs)
- poj3009Curling 2.0(简单dfs)
- 简单dfs模板
- XCOM Enemy Unknown 简单的dfs() 枚举就行,不过有个用二进制压缩的没看懂
- poj1979 水题简单dfs
- [简单dfs]poj1321棋盘问题
- HDOJ1181(简单DFS)(练习使用STL)
- hrbust1164, 1287_____hrbust上的简单哈希
- DFS-分布式文件系统简单应用配置