首页 > 代码库 > HDU 1241 Oil Deposits(石油储藏)
HDU 1241 Oil Deposits(石油储藏)
<style>p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-size: 10.5000pt }
h1 { margin-top: 5.0000pt; margin-bottom: 5.0000pt; text-align: center; font-family: 宋体; color: rgb(26,92,200); font-weight: bold; font-size: 24.0000pt }
span.10 { font-family: "Times New Roman" }
span.15 { font-family: "Times New Roman"; color: rgb(26,92,200) }
span.16 { font-family: "Times New Roman"; color: rgb(26,92,200) }
p.pre { margin: 0pt; margin-bottom: .0001pt; text-align: left; font-family: 宋体; font-size: 12.0000pt }
span.msoIns { text-decoration: underline; color: blue }
span.msoDel { text-decoration: line-through; color: red }
table.MsoNormalTable { font-family: "Times New Roman"; font-size: 10.0000pt }
div.Section0 { }</style>
CN
CN
CN
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每次处理一块大型矩形区域,并用一个网格将其划分为若干正方形格子。然后使用传感器分析各个格子是否埋藏石油。
藏有石油的格子则被称为口袋。如果两个口袋相邻,则属于同一片石油。石油可能很大并包含多个口袋。你的任务是测定网格上有多少片石油。
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 <= 100 且 1 <= n <= 100。 随后m行,每行n个字符(不含行尾字符)。每个字符表示一个格子,`*‘表示没有石油,`@‘表示一个石油袋。
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个口袋。
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(石油储藏)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。