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;
    }

  • 相关阅读:
    我们毕业了!!!@全体成员
    华东交通大学编译原理期末试卷
    软件设计师中级下午答题解题策略分析~
    Java实现旅行商最短距离
    基于SSH的医院在线挂号
    基于Java的模拟写字板的设计与实现
    基于java的雷电游戏
    基于Java的飞机大战游戏的设计与实现
    基于Java的超级玛丽游戏的设计与实现
    基于Javaee的影视创作论坛的设计与实现
  • 原文地址:https://www.cnblogs.com/Pretty9/p/7347719.html
Copyright © 2011-2022 走看看