背景描述

滨州地质检察局 的 小斌 同志负责探测bzu地下石油储藏。 小斌现在在一块矩形区域探测石油。他们通过专业设备,来分析每个小块中是否蕴藏石油。如果这些蕴藏石油的小方格相邻(横向相邻,纵向相邻,还有对角相邻),那么他们被认为是同一油藏的一部分。在这块矩形区域,可能有很多油藏。你的任务是确定有多少不同的油藏。

输入

输入可能有多个矩形区域(即可能有多组测试)。每个矩形区域的起始行包含m和n,表示行和列的数量,1<=n,m<=100,如果m =0表示输入的结束,接下来是n行,每行m个字符。每个字符对应一个小方格,并且要么是’*’,代表没有油,要么是’@’,表示有油。(注意多组数据,必要的数组要及时清空~)

输出

对于每一个矩形区域,输出油藏的数量。两个小方格是相邻的,当且仅当他们水平或者垂直或者对角线相邻(即8个方向)。

示例输入

1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

示例输出

0
1
2
2

DFS做法

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
int vis[MAXN][MAXN];
char map[MAXN][MAXN];
int cnt = 0,n,m;
const int INF = 1e9;
const double L = 1e-8;
void dfs(int x, int y) {if (map[x][y] == '*' || x < 0 || y < 0 || x >= m || y >= n || vis[x][y])return;else {vis[x][y] = 1;dfs(x - 1, y);dfs(x, y - 1);dfs(x + 1, y);dfs(x, y + 1);dfs(x - 1, y - 1);dfs(x - 1, y + 1);dfs(x + 1, y - 1);dfs(x + 1, y + 1);}
}
void solve() {while (~scanf("%d%d", &m, &n) ){if (m == 0 && n == 0)break;memset(vis, 0, sizeof vis);cnt = 0;for (int i = 0; i < m; i++)scanf("%s", map[i]);for(int i=0;i<m;i++)for (int j = 0; j < n; j++) {if (map[i][j] == '@' && !vis[i][j]) {dfs(i, j);cnt++;}}cout << cnt << endl;}
}
int main() {//int _;//cin >> _;//while (_--) {solve();//}return 0;
}

BFS做法

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
int vis[MAXN][MAXN];
char map[MAXN][MAXN];
int cnt = 0,n,m;
const int INF = 1e9;
const double L = 1e-8;
int dx[] = { 1,1,1,-1,-1,-1,0,0 };
int dy[] = { 0,-1,1,0,-1,1,-1,1 };
struct loc {int x, y;
};
queue<loc>q;
void bfs(int x, int y) {loc tmp, now;tmp.x = x;tmp.y = y;q.push(tmp);while (!q.empty()) {now = q.front();q.pop();for (int i = 0; i < 8; i++) {int xx = now.x + dx[i];int yy = now.y + dy[i];if (xx < 0 || xx >= m || yy < 0 || yy >= n)continue;if (vis[xx][yy])continue;if (map[xx][yy] == '*')continue;tmp.x = xx;tmp.y = yy;q.push(tmp);vis[xx][yy] = 1;}}
}
void solve() {while (~scanf("%d%d", &m, &n) ){if (m == 0 && n == 0)break;memset(vis, 0, sizeof vis);cnt = 0;for (int i = 0; i < m; i++)scanf("%s", map[i]);for(int i=0;i<m;i++)for (int j = 0; j < n; j++) {if (map[i][j] == '@' && !vis[i][j]) {bfs(i, j);cnt++;}}cout << cnt << endl;}
}
int main() {//int _;//cin >> _;//while (_--) {solve();//}return 0;
}

HDU1241 Oil Deposits(BFS/DFS)相关推荐

  1. LeetCode 1034. 边框着色(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维整数网格 grid,网格中的每个值表示该位置处的网格块的颜色. 只有当两个网格块的颜色相同,而且在四个方向中任 ...

  2. LeetCode 967. 连续差相同的数字(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 返回所有长度为 N 且满足其每两个连续位上的数字之间的差的绝对值为 K 的非负整数. 请注意,除了数字 0 本身之外,答案 ...

  3. LeetCode 314. 二叉树的垂直遍历(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 1. 题目 给定一个二叉树,返回其结点 垂直方向(从上到下,逐列)遍历的值. 如果两个结点在同一行和列,那么顺序则为 从左到右. 示例 ...

  4. LeetCode 1215. 步进数(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 如果一个整数上的每一位数字与其相邻位上的数字的绝对差都是 1,那么这个数就是一个「步进数」. 例如,321 是一个步进数, ...

  5. LeetCode 1236. 网络爬虫(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给定一个链接 startUrl 和一个接口 HtmlParser ,请你实现一个网络爬虫,以实现爬取同 startUrl ...

  6. LeetCode 490. 迷宫(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 由空地和墙组成的迷宫中有一个球. 球可以向上下左右四个方向滚动,但在遇到墙壁前不会停止滚动. 当球停下时,可以选择下一个方 ...

  7. LeetCode 417. 太平洋大西洋水流问题(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 广度优先搜索 2.2 DFS 深度优先搜索 1. 题目 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度. "太平洋&q ...

  8. 程序员面试金典 - 面试题 16.19. 水域大小(BFS/DFS)

    1. 题目 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度. 若值为0则表示水域.由垂直.水平或对角连接的水域为池塘. 池塘的大小是指相连接的水域的个数. 编写 ...

  9. 程序员面试金典 - 面试题 08.10. 颜色填充(BFS/DFS)

    1. 题目 颜色填充.编写函数,实现许多图片编辑软件都支持的"颜色填充"功能. 给定一个屏幕(以二维数组表示,元素为颜色值).一个点和一个新的颜色值,将新颜色值填入这个点的周围区域 ...

  10. 剑指Offer - 面试题13. 机器人的运动范围(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动 ...

最新文章

  1. php好的mvc中index方法,创建一个mvc应用目录架构并创建入口文件index.php
  2. 安全漏洞“心脏出血”继续 原因是“丘比特”
  3. 使用mod_proxy_balancer实现负载均衡
  4. Asp.net控件之异同:HTML控件与Web服务器控件
  5. 2018ICPC网络赛(焦作站)K题题解
  6. 您的浏览器由所属组织管理_FB频繁被封,关于多账号环境管理的知识你掌握了吗?...
  7. 字典的增删改查 daty 5
  8. Akka-CQRS(2)- 安装部署cassandra cluster,ubuntu-16.04.1-LTS and MacOS mojave
  9. 力扣-80 删除有序数组中的重复项 II
  10. Golang 入门系列(六)理解Go中的协程(Goroutine)
  11. js对象定义的3种方法
  12. [渝粤教育] 浙江大学 2021秋 茶叶加工与品质管理学Ⅰ 陈萍 章节答案考试答案 浙江大学[渝粤教育]
  13. 洛谷P4325 [COCI2006-2007#1] Modulo
  14. C语言 命令行 execl函数
  15. 如何用photoshop切图并去掉图片上面的文字
  16. Docker基本使用教程
  17. 理财入门《小狗钱钱》阅读总结
  18. Android Binder设计与实现 - 设计篇
  19. 夏普/sharp willcom d4 刷linux,IT豆
  20. PCB入门使用技巧——个人笔记

热门文章

  1. MySQL安装图解设置详细教程
  2. 数字电视 星座图 matlab,数字电视 MER 及星座图剖析
  3. java正则判断银行卡号,验证银行卡号正则
  4. GMT,UTC,CST,ISO等时间标志以及时区的总结
  5. 如何读一篇论文,笔记
  6. 最新TIOBE编程语言排行:C语言第一,Python反超Java,挤进第二
  7. 关于英语猜词义的方法
  8. css属性:min-height是什么意思?
  9. 测试用例设计——错误猜测法
  10. 转:红帽旗下Linux的版本说明RedHat、CentOS、Fedora、OEL等