zoukankan      html  css  js  c++  java
  • HDU 1241 Oil Deposits(石油储藏)

    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
    ", opt);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    CSS——实现图像远距离翻转效果
    《精通CSS》一个下拉菜单的例子
    将博客搬至CSDN
    44个Java代码性能优化总结
    QRCode 二维码生成
    Linux命令
    spring
    ajax 学习总结
    Servlet+Ajax实现搜索框智能提示代码
    搜索框智能提示
  • 原文地址:https://www.cnblogs.com/Simon-X/p/6391963.html
Copyright © 2011-2022 走看看