HDU_1241 Oil Deposits(DFS深搜)

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

题目大意:

探测地下的石油储量,含有油的地区被称为口袋。 如果两个口袋是相邻的,那么它们是相同的石油矿床的一部分。石油储量可能非常大,可能含有大量的口袋。 你的任务是要确定不同的石油储量有多少包含在一个网格。

输入文件包含一个或多个网格。 每个网格开始用含有m和n,行和列的网格中的号码的线路,由一个空格分开。 如果m = 0它标志着输入的结束; 否则1 <= M <= 100,1 <= N <= 100。在此之后是每个n字符(不包括端部的行的字符)m条。 每个字符对应一个情节,‘*‘,代表没有油,‘@‘,是有油。

对于每一个网格,输出不同油沉积物的数量。 一堆@连在一起的算一个大油田(对角线,横竖都算)。问有几个大油田。

代码如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 char map[110][110];
 4 int move[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,-1,1,-1,-1,1};//两个坐标一组 分为8组
 5 int h,w;
 6 void dfs(int x,int y)//定义dfs函数,主函数找到了@,dfs启动,寻找主函数找到的@八面存在的@
 7 {
 8     int next_x,next_y,i;
 9     map[x][y]=‘*‘;//把找到的@变为*,以免重复搜索
10     for(i=0;i<8;i++)
11     {
12         next_x=x+move[i][0];//[0]表示两个坐标一组的第一个[i]表示两个坐标一组的第几组
13         next_y=y+move[i][1];//[1]表示两个坐标一组的第二个[i]表示两个坐标一组的第几组
14         if(next_x>=0&&next_x<h&&next_y>=0&&next_y<w)
15         {
16             if(map[next_x][next_y]==‘@‘)
17             {
18                 dfs(next_x,next_y);
19             }
20         }
21     }
22 }
23 int main()//主函数开始,寻找第一个@
24 {
25     int i,j,sum;
26     while(scanf("%d%d",&h,&w)&&(h!=0||w!=0))
27     {
28         for(i=0;i<h;i++)
29         scanf("%s",map[i]);
30         sum=0;
31         for(i=0;i<h;i++)
32         {
33             for(j=0;j<w;j++)
34             {
35                 if(map[i][j]==‘@‘)
36                 {
37                     dfs(i,j);//转移到dfs函数,由dfs函数开始搜索主函数找到@的八面存在的@
38                     sum++;
39                 }
40             }
41         }
42         printf("%d\n",sum);
43     }
44     return 0;
45 }

思路解析:

经典DFS,大概思路写进注释里面啦~

时间: 2024-11-21 06:33:26

HDU_1241 Oil Deposits(DFS深搜)的相关文章

(经典DFS)HDU_1241 Oil Deposits

HDU_1241 Oil Deposits 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 i

CodeM美团点评编程大赛初赛B轮 黑白树【DFS深搜+暴力】

[编程题] 黑白树 时间限制:1秒 空间限制:32768K 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值k[i].每个点都有一个颜色,初始的时候所有点都是白色的. 你需要通过一系列操作使得最终每个点变成黑色.每次操作需要选择一个节点i,i必须是白色的,然后i到根的链上(包括节点i与根)所有与节点i距离小于k[i]的点都会变黑,已经是黑的点保持为黑.问最少使用几次操作能把整棵树变黑. 输入描述: 第一行一个整数n (1 ≤ n ≤ 10^5) 接下来n-1

A Knight&#39;s Journey(DFS)深搜

A Knight's Journey Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33634 Accepted: 11450 Description Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around

UVa 572 Oil Deposits(DFS)

 Oil Deposits  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.

hdu1010-Tempter of the Bone DFS深搜入门题+奇偶剪枝

Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 69699    Accepted Submission(s): 19176 Problem Description The doggie found a bone in an ancient maze, which fascinated him a

DFS深搜-Red and Black

深搜,从一点向各处搜找到所有能走的地方. Problem Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move on

dfs深搜

dfs深搜 什么是深搜? 百度百科:按照一定的顺序.规则,不断去试探,直到找到问题的解,试完了也没有找到解,那就是无解,试探时一定要试探完所有的情况(实际上就是穷举) 个人理解:暴力穷举每一种状态 它有什么好处? 容易理解 骗分利器 好写 它有什么弊端? 慢.毕竟是穷举每一种状态 一搜到底.对于递归次数非常多的话,dfs会非常浪费时间,甚至有可能会爆栈 如何实现? 算法流程图如下: #include <iostream> #include <cstdio> void dfs(int

Oil Deposits(dfs)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15291    Accepted Submission(s): 8787 Problem Description The GeoSurvComp geologic survey company is responsible for detecting underground oil dep

Oil Deposits DFS FloodFill漫水填充法求连通块问题

Oil Deposits 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