【UVA 572】Oil Deposits 题解(深度优先搜索)
GeoSurvComp地质调查公司负责探测地下石油矿床。
GeoSurvComp一次处理一个大的矩形土地区域,并创建一个划分
将土地分割成许多方形地块。然后使用传感设备分别分析每个地块
确定图中是否含有油。
含有石油的地块称为口袋。如果两个口袋相邻,则它们是
相同的油沉积。油沉积物可能非常大,并且可能包含许多气穴。你的工作是
确定网格中包含多少不同的油沉积物。
输入
输入文件包含一个或多个网格。每个网格以一条包含m和n的线开始
网格中的行和列,由单个空间分隔。如果m=0,则表示输入结束;
否则1≤m≤100,1≤n≤100。下面是m行,每行n个字符(不计在内
行尾字符)。每个字符对应一个绘图,并且是“*”,表示
无油,或“@”,表示油袋。
输出
对于每个网格,输出不同石油沉积物的数量。两个不同的口袋是相同的一部分
如果它们水平、垂直或对角相邻,则会沉积油。油沉积物不会包含
超过100个口袋。
Sample Input
1 1
*
3 5
@@*
@
@@*
1 8
@@***@
5 5
****@
@@@
@**@
@@@@
@@**@
0 0
Sample Output
0
1
2
2
思路
用一个二维数组储存图。对图进行遍历,若找到@,则将其替换为*,计数器加一,然后对该位置的八个方向进行搜索,把@替换为*。注意搜索时需要判断是否出界。
AC代码
#include <iostream>
using namespace std;
#define AUTHOR "HEX9CF"const int maxn = 105;int m, n;
char map[maxn][maxn];
int cnt;void dfs(int x, int y)
{map[x][y] = '*';for (int i = x - 1; i <= x + 1; i++){for (int j = y - 1; j <= y + 1; j++){if ('@' == map[i][j] && i >= 0 && i < m && j >= 0 && j < n){dfs(i, j);}}}
}void print()
{for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){cout << map[i][j];}cout << endl;}
}int main()
{while (1){cnt = 0;cin >> m >> n;if (!m && !n){return 0;}cnt = 0;for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){cin >> map[i][j];}}for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if ('@' == map[i][j]){cnt++;dfs(i, j);}}}// print();cout << cnt << endl;}return 0;
}
【UVA 572】Oil Deposits 题解(深度优先搜索)相关推荐
- UVA - 572 Oil Deposits
/*1. 图也有DFS遍历和BFS遍历,前者用递归实现,后者用队列实现.由于DFS更容易编写,一般用DFS求连通块.求多维数组连通块的过程也称为种子填充2. 一般要尽量避免同一个格子被访问了两次,但是 ...
- uva 572 Oil Deposits
水题 #include <iostream> #include <cstdio> #define N 103 using namespace std; char w[N][N] ...
- 【POJ - 1562】Oil Deposits (dfs搜索,连通块问题)
题干: The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. G ...
- UVA - 572 Oil Deposits-dfs找连通块
Discription 给定一个包含@ *的二维数组,输出有几个@是联通的,如果一个@在另外一个@相邻的八个方向则视作相邻. Input 包含@ *的二维数组. Output 输出联通的个数 解题思路 ...
- C++算法复习之深度优先搜索(dfs)与解救小扣题解
深度优先搜索(Depth First Search) 深度优先搜索,一种非常快速的 搜索方式,接下来我们将主要讨论: 搜索方式 本质 应用 搜索方式 深度优先搜索原本是专门为树形图与无向图准备的,如下 ...
- NUC1397 Oil Deposits【DFS】
Oil Deposits 时间限制: 1000ms 内存限制: 65535KB 问题描述 The GeoSurvComp geologic survey company is responsible ...
- “暴力美学1”——DFS深度优先搜索
作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...
- [C] 深度优先搜索解决连通块/染色问题——求岛的个数
本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...
- leetcode 559. N 叉树的最大深度(Java版,N叉树的深度优先搜索)
题目 https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/ 题解 思路是 N 叉树的遍历(深度优先搜索) /* // Defini ...
最新文章
- egret 开发总结
- php获取http头信息,php如何获取http头信息
- pycharm Debug问题
- Java并发篇_synchronized
- 【java】CGLIB动态代理原理分析
- Android特色开发之语音识别
- geotools读取shp数据的数据类型
- java私塾初级_Java私塾Java初级教程
- 2019汤家凤高等数学强化班讲义
- Springer LNCS Latex 模板 无法下载
- 科学计算机sd mode使用方法,科学计算器使用方法
- linux运行uclinux程序,uClinux的编译与运行详解
- java毕业设计软件源代码SSM酒店管理系统|旅店管理
- 5421. 【NOIP2017提高A组集训10.25】嘟嘟噜—mayuri
- OpenStack部署(图文详解)
- windows和linux双系统
- 华为路ws5200设置虚拟服务器,华为WS5200无线路由器怎么设置?
- 2023届嵌入式笔面经一位双非本科生的秋招日记
- 阿里巴巴与微软、苹果、亚马逊的实力对比
- php code manual optimization,PHP优化详解_PHP教程