经典DFS--找油田---POJ 1562
2015-07-26 21:26
489 查看
A B C D E F G H I J K L M N O P Q R S T U V
H - 深搜/广搜 基础
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice POJ
1562
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 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
are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
Sample Input
Sample Output
H - 深搜/广搜 基础
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d
& %I64u
Submit Status Practice POJ
1562
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 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
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
//@author: yzj Date:2015/07/26 //sourse : http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82603#problem/H //meaning: 经典找油田DFS问题 #include <iostream> #include <cstdio> #include <queue> using namespace std; const int MAXN = 105; int n, m; char c[MAXN][MAXN]; void dfs(int x, int y) { c[x][y]='*'; for(int i = -1; i <= 1; i++) { for(int j = -1; j <=1; j++) { int nx = x+i, ny = y+j; if(0<=nx&&nx<n&&0<=ny&&ny<m&&c[nx][ny]=='@') { dfs(nx, ny); } } } } int main() { //freopen("f:/yzj/cppCode/input.txt", "r", stdin); /* 又学到了一个小技巧:由于scanf函数不能自动忽略空格,所以在输入数字紧接着要 输入字符型char时,我们就需要小心了,不要读到空格或是回车 解决方法有两种: 1.使用getchar()函数 2.直接在%d或者是%c前面使用空格,就好了 */ while(~scanf(" %d %d", &n, &m)) { if(n == 0 && m==0) break; //getchar(); for(int i = 0 ; i < n; i++) { for(int j = 0; j < m; j++) { scanf(" %c", &c[i][j]); } //getchar(); } // for(int i = 0 ; i < n; i++) // { // for(int j = 0; j < m; j++) // { // cout << c[i][j]; // } // cout << endl; // } int ans = 0; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { if(c[i][j]=='@') { dfs(i, j); ans++; } } } printf("%d\n", ans); } return 0; }
相关文章推荐
- Java文件拷贝
- DataInputStream和DataOutputStream操作基本数据类型的流
- MPI_Gathe MPI收集
- Android Canvas的save(),saveLayer()和restore()浅谈
- (剑指Offer)面试题39:判断平衡二叉树
- java之连续子数组的最大和
- Dev-Cpp/Mingw32 环境介绍
- hihocoder 1154 Spring Outing
- stm32中的C语言(7.24)
- ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- mcafee8.8 Patch1与mcafee8.7 Patch5右键扫描出现msi.dll等无效映像错误的解决方法
- 近期使用McAfee8.8时碰到的一些问题
- 常用数组方法
- android 用xml实现点击效果
- CS224d Problem set 1作业
- 动态代理
- 如何查看自己电脑上windows installer的版本?
- logstash 1.5.3 配置使用redis做续传
- 强大的ViewDragHelper和ViewDragHelper的妙用 一
- Android 中Service 和Activity之间传值。(涉及BroadCast的基本用法)