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 题解(深度优先搜索)相关推荐

  1. UVA - 572 Oil Deposits

    /*1. 图也有DFS遍历和BFS遍历,前者用递归实现,后者用队列实现.由于DFS更容易编写,一般用DFS求连通块.求多维数组连通块的过程也称为种子填充2. 一般要尽量避免同一个格子被访问了两次,但是 ...

  2. uva 572 Oil Deposits

    水题 #include <iostream> #include <cstdio> #define N 103 using namespace std; char w[N][N] ...

  3. 【POJ - 1562】Oil Deposits (dfs搜索,连通块问题)

    题干: The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. G ...

  4. UVA - 572 Oil Deposits-dfs找连通块

    Discription 给定一个包含@ *的二维数组,输出有几个@是联通的,如果一个@在另外一个@相邻的八个方向则视作相邻. Input 包含@ *的二维数组. Output 输出联通的个数 解题思路 ...

  5. C++算法复习之深度优先搜索(dfs)与解救小扣题解

    深度优先搜索(Depth First Search) 深度优先搜索,一种非常快速的 搜索方式,接下来我们将主要讨论: 搜索方式 本质 应用 搜索方式 深度优先搜索原本是专门为树形图与无向图准备的,如下 ...

  6. NUC1397 Oil Deposits【DFS】

    Oil Deposits 时间限制: 1000ms 内存限制: 65535KB 问题描述 The GeoSurvComp geologic survey company is responsible ...

  7. “暴力美学1”——DFS深度优先搜索

    作为新时代青年,"暴力"二字似乎离我们十分遥远,大多数时候我们只能够在电影或者电视剧上接触这个概念 暴力二字或许是个贬义词,但若是我们在后面加上美学二字,或许就是一个值得推敲的词汇 ...

  8. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

  9. leetcode 559. N 叉树的最大深度(Java版,N叉树的深度优先搜索)

    题目 https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/ 题解 思路是 N 叉树的遍历(深度优先搜索) /* // Defini ...

最新文章

  1. egret 开发总结
  2. php获取http头信息,php如何获取http头信息
  3. pycharm Debug问题
  4. Java并发篇_synchronized
  5. 【java】CGLIB动态代理原理分析
  6. Android特色开发之语音识别
  7. geotools读取shp数据的数据类型
  8. java私塾初级_Java私塾Java初级教程
  9. 2019汤家凤高等数学强化班讲义
  10. Springer LNCS Latex 模板 无法下载
  11. 科学计算机sd mode使用方法,科学计算器使用方法
  12. linux运行uclinux程序,uClinux的编译与运行详解
  13. java毕业设计软件源代码SSM酒店管理系统|旅店管理
  14. 5421. 【NOIP2017提高A组集训10.25】嘟嘟噜—mayuri
  15. OpenStack部署(图文详解)
  16. windows和linux双系统
  17. 华为路ws5200设置虚拟服务器,华为WS5200无线路由器怎么设置?
  18. 2023届嵌入式笔面经一位双非本科生的秋招日记
  19. 阿里巴巴与微软、苹果、亚马逊的实力对比
  20. php code manual optimization,PHP优化详解_PHP教程

热门文章

  1. linux查看日历的命令,Linux终端显示日历信息的命令:ncal命令
  2. 数字电路和模拟电路-2数字电路基础
  3. 水库水雨情自动测报系统 水库雨水情测报
  4. Python地理处理01-基于栅格单元与栅格单元的分区统计
  5. 计算机英语词汇的特点,计算机英语词汇特点浅析开题报告.doc
  6. 因子分析模型(清风建模学习笔记)
  7. MATLAB-自动控制原理-控制系统的数学模型
  8. itextPdf超长图片转pdf文件
  9. Linux上手动编译apache
  10. 内存是手游的硬伤——Unity游戏Mono内存管理与泄漏