zoukankan      html  css  js  c++  java
  • 搜索专题:HDU1241 Oil Deposits

    Oil Deposits

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 32337    Accepted Submission(s): 18765


    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
     

    Recommend
    Eddy   |   We have carefully selected several similar problems for you:  1240 1181 1253 1072 1175 
    DFS求连通块就行了,但是注意是八个方向的,我用了方向数组和for循环,想想自己当初是不是傻,手写八个DFS。。。
     

    Problem : 1241 ( Oil Deposits )     Judge Status : Accepted
    RunId : 21282350    Language : G++    Author : hnustwanghe
    Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    const int N = 100 + 5;
    char mat[N][N];
    bool visit[N][N];
    int n,m;
    const int dir[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}};
    void DFS(int x,int y){
    if(x<0 || x>=n || y<0 || y>=m || visit[x][y] || mat[x][y]!='@') return ;
    visit[x][y] = true;
    for(int d=0;d<8;d++){
    int newx = x + dir[d][0];
    int newy = y + dir[d][1];
    DFS(newx,newy);
    }
    }
    int solve_question(){
    memset(visit,0,sizeof(visit));
    int cnt = 0;
    for(int i=0;i<n;i++)
    for(int j=0;j<m;j++){
    if(!visit[i][j] && mat[i][j]=='@'){
    DFS(i,j);
    cnt++;
    }
    }
    return cnt;
    }
    int main(){
    while(scanf("%d %d",&n,&m)==2&&(n||m)){
    for(int i=0;i<n;i++)
    scanf("%s",mat[i]);
    printf("%d ",solve_question());
    }
    return 0;
    }

  • 相关阅读:
    深入理解javascript中的立即执行函数(function(){…})()
    多行文本溢出省略号显示
    JS学习思路
    canvas画圆
    软件需求与软件评估
    parawork功能使用说明
    ”0元中标的商业逻辑“ -- 如何更好防范项目风险(北京软件造价评估技术创新联盟:李培圣)
    parawork平台介绍
    基准化的软件绩效和成本度量
    jQuery对表格的操作及其他应用
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7347719.html
Copyright © 2011-2022 走看看