Oil Deposits

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 15   Accepted Submission(s) : 14

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

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
 1 #include<stdio.h>
 2 #include<string.h>
 3 char f[8][2]={1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1};//定义方向数组,8个方向,多了个折线方向。
 4  int n,m;
 5 char map[120][120];
 6 void dfs(int x,int y)
 7 {
 8    int x1,y1,i;
 9    for(i=0;i<8;i++)
10    {
11        x1=x+f[i][0];
12        y1=y+f[i][1];
13        if(x1>=n||y1>=m||x1<0||y1<0||map[x1][y1]!='@')
14          continue;
15         map[x1][y1]='*';//把访问过的@变成*,下次就不会再访问。
16          dfs(x1,y1);
17    }
18 }
19 int main()
20 {
21     int i,j,s;
22  while(~scanf("%d%d",&n,&m)&&n!=0&&m!=0)
23  {
24           s=0;
25        for(i=0;i<n;i++)
26            scanf("%s",map[i]);
27        for(i=0;i<n;i++)
28            for(j=0;j<m;j++)
29                if(map[i][j]=='@')
30                {
31                    map[i][j]='*';
32                        s++;
33                      dfs(i,j);
34                }
35     printf("%d\n",s);
36  }
37     return 0;
38  }
39  

转载于:https://www.cnblogs.com/cancangood/p/3278890.html

HDU-1241 Oil Deposits (DFS)相关推荐

  1. hdu 1241 Oil Deposits 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 第一次写搜索代码 花了好大的功夫检查 看了别人的结题报告 还是错误一大堆 哎 题目是这样的 @表 ...

  2. HDU 1241 Oil Deposits

    题目大意是找到独立的油田个数,所谓独立就是跟它相邻的八个方向上都不能再有别的油田.思路就是每遇到一个'@'都要将它周围的所有'@'都给改成'*',用DFS跟BFS都可以,这里是DFS的代码: AC c ...

  3. UVa572 Oil Deposits DFS求连通块

    技巧:遍历8个方向 for(int dr = -1; dr <= 1; dr++)for(int dc = -1; dc <= 1; dc++)if(dr != 0 || dc != 0) ...

  4. UVA572 Oil Deposits DFS求解

    小白书上经典DFS题目. 1. 递归实现 // from: https://www.cnblogs.com/huaszjh/p/4686092.html#include <stdio.h> ...

  5. L - Oil Deposits HDU - 1241

    L - Oil Deposits HDU - 1241 注意写check的时候要先判x,y是不是越界了,不然直接用数组可能RE, 也可能直接WA了 #include<cstdio> #in ...

  6. 【HDU - 1241】Oil Deposits (连通块问题 属于求大海中的岛屿个数 类似问题)

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

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

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

  8. NUC1397 Oil Deposits【DFS】

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

  9. L - Oil Deposits

    题目描述 The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. ...

最新文章

  1. Python基础编程——字典
  2. 世界上有没有无法破解的密码?揭秘量子通信 | 图图是道
  3. [导入]创建笔 (Visual C#)
  4. BZOJ1012|JSOI最大数maxnumber|线段树
  5. 开发你的第一个LYNC应用-第二部分
  6. LeetCode 04寻找两个正序数组的中位数(困难)二分法
  7. 【实施工程师】Linux安装Windows软件:微信、QQ、TIM
  8. MySQL count(1) , count(*), count(列名) 的异同
  9. 14 事务控制和锁定语句
  10. 在iOS上使用AirPrint实现无线打印功能
  11. 【计算机网络学习笔记16】网络新技术
  12. 8位数码管静态显示c语言,数码管静态显示介绍_8位数码管静态显示程序解析
  13. html中button标签reset用法
  14. 一起学习正则表达式(五)断言匹配
  15. 将十进制数转换成二进制数(C语言)
  16. Boost log库
  17. 奶爸日记15 - 轮船风景
  18. 【训练题22:线性求逆元】【模板】乘法逆元 | 洛谷 P3811
  19. 【PCL】LINK2001 “protected:virtual void_cdel pcl::XXX报错
  20. java 自然常数e中出现的连续的第一个10个数字组成的质数,一道google面试题--自然数e中出现的连续的第一个10个数字组成的质数...

热门文章

  1. 兼容性好的overflow CSS清除浮动一例
  2. [Qt-creator]实用技巧----基于ubuntu
  3. 批量删除redis键
  4. Bw树:新硬件平台的B树(内存数据库中的b树索引)
  5. 国产WEB漏洞测试平台——MST
  6. JS中URL编码解码
  7. RAC测试及命令示例
  8. Android Canvas和Paint
  9. sdch: chrome支持的新HTTP传输压缩算法
  10. 漫谈Google的Native Client(NaCl)技术