码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1241 Oil Deposits(石油储藏)

时间:2017-02-12 22:29:42      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:otto   c11   distinct   输入   blog   文件   enter   传感器   scanf   

HDU 1241 Oil Deposits(石油储藏)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

 

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.
技术分享
GeoSurvComp地质勘测公司勘测底下石油。
GeoSurvComp每次处理一块大型矩形区域,并用一个网格将其划分为若干正方形格子。然后使用传感器分析各个格子是否埋藏石油。
藏有石油的格子则被称为口袋。如果两个口袋相邻,则属于同一片石油。石油可能很大并包含多个口袋。你的任务是测定网格上有多少片石油。
CN

 

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.
技术分享
输入文件有若干个网格。
每个网格第一行有m和n,表示行与列,以一个空格分隔。
如果m=0则结束输入。此外1 <= m <= 1001 <= n <= 100。
随后m行,每行n个字符(不含行尾字符)。每个字符表示一个格子,`*表示没有石油,`@表示一个石油袋。
CN


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.
技术分享
对于每个网格,输出有多少片石油。属于同一片石油的相邻口袋关系为水平,重置,或对角线。每片石油不超过100个口袋。
CN

 

Sample Input - 输入样例

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

 

Sample Output - 输出样例

0
1
2
2

 

题解
  水题。
  直接拿FZU 2150前半部分的代码稍微改改就A了,不超过100的条件并没有什么用。
  BFS和DFS应该没区别……都能做。

 

代码 C++

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <queue>
 4 #define MX 105
 5 struct Point{
 6     int y, x;
 7 } now, nxt;
 8 char map[MX][MX];
 9 int fx[16] = { 1, 0, -1, 0, 0, -1, 0, 1, 1, 1, -1, -1, 1, -1, -1, 1 };
10 std::queue<Point> q;
11 int main(){
12     int m, n, opt, i, j, k;
13     while (scanf("%d%d ", &m, &n), m + n){
14         opt = 0;
15         memset(map, *, sizeof map);
16         for (i = 1; i <= m; ++i) gets(&map[i][1]);
17 
18         for (i = 1; i <= m; ++i) for (j = 1; j <= n; ++j){
19             if (map[i][j] != @) continue;
20             now.y = i; now.x = j;
21             q.push(now); ++opt; map[now.y][now.x] = *;
22             while (!q.empty()){
23                 now = q.front(); q.pop();
24                 for (k = 0; k < 16; k += 2){
25                     nxt.y = now.y + fx[k]; nxt.x = now.x + fx[k + 1];
26                     if (map[nxt.y][nxt.x] == @){ q.push(nxt); map[nxt.y][nxt.x] = *; }
27                 }
28             }
29         }
30         printf("%d\n", opt);
31     }
32     return 0;
33 }

 

HDU 1241 Oil Deposits(石油储藏)

标签:otto   c11   distinct   输入   blog   文件   enter   传感器   scanf   

原文地址:http://www.cnblogs.com/Simon-X/p/6391963.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!