HDU Problem 1241 Oil Deposits 【DFS】
2016-07-28 14:59
459 查看
Oil Deposits
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 24406 Accepted Submission(s): 14029
Problem Description
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSurvComp works with one large rectangular region of land at a time, and creates a grid that divides the land into numerous square plots. It then analyzes each
plot separately, using sensing equipment to determine whether or not the plot contains oil. A plot containing oil is called a pocket. If two pockets are adjacent, then they are part of the same oil deposit. Oil deposits can be quite large and may contain numerous
pockets. Your job is to determine how many different oil deposits are contained in a grid.
Input
The input file contains one or more grids. Each grid begins with a line containing m and n, the number of rows and columns in the grid, separated by a single space. If m = 0 it signals the end of the input; otherwise 1 <= m <= 100 and 1 <= n <= 100. Following
this are m lines of n characters each (not counting the end-of-line characters). Each character corresponds to one plot, and is either `*', representing the absence of oil, or `@', representing an oil pocket.
Output
For each grid, output the number of distinct oil deposits. Two different pockets are part of the same oil deposit if they are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
Sample Input
1 1
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
Sample Output
0
1
2
2
Source
Mid-Central USA 1997
Recommend
Eddy | We have carefully selected several similar problems for you: 1016 1010 1240 1372 1253
相比较POJ 3620 Avoid The Lakes 这道题就是多了四个方向,一样的遍历。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; char map[105][105]; int n, m, k; int dx[8] = {0,1,0,-1,1,1,-1,-1}; int dy[8] = {1,0,-1,0,1,-1,1,-1}; void dfs(int x, int y) { for (int i = 0; i < 8; i++) { int a = dx[i] + x; int b = dy[i] + y; if (a < 0 || a >= n || b < 0 || b >= m || map[a][b] == '*') continue; else { map[a][b] = '*'; dfs(a, b); } } } int main() { int row, col; while (scanf("%d%d", &n, &m), m) { for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin>>map[i][j]; } } int cnt = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (map[i][j] == '@') { cnt++; dfs(i, j); } } } printf("%d\n", cnt++); } return 0; }
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- 简单的四则运算
- 数的奇偶性
- ACMer博客瀑布流分析
- ACM程序设计大赛题目分类
- 2015年acm国内排名
- 计算字符串最后一个单词长度
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- ACM网址
- 1272 小希的迷宫
- 1272 小希的迷宫
- hdu 1250 大数相加并用数组储存
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- 矩阵的乘法操作
- C 语言实现迷宫 DFS算法