zoukankan      html  css  js  c++  java
  • UVa 572 油田 (dfs)

    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 mand 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 le m le 100$ and $1 le n le 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

    思路:
    直接用dfs爆搜
    实现代码:
    #include<iostream>
    #include<cstring>
    using namespace std;
    const int M = 1e2+6;
    int vis[M][M];
    char mp[M][M];
    int n,m;
    void dfs(int u,int v,int d){
        if(u < 0||u >= m||v < 0||v >= n) return;
        if(vis[u][v]||mp[u][v]!='@') return;
        vis[u][v] = 1;
        for(int i = -1;i <= 1;i ++){
            for(int j = -1;j <= 1;j ++){
                if(i==0&&j==0) continue;
                dfs(u+i,v+j,d);
            }
        }
        return;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
        while(cin>>m>>n){
        if(n==0||m==0) break;
        for(int i = 0;i < m;i ++)
            for(int j = 0;j < n;j ++)
                cin>>mp[i][j];
        memset(vis,0,sizeof(vis));
        int ans = 0;
        for(int i = 0;i < m;i ++){
            for(int j = 0;j < n;j ++){
               if(!vis[i][j]&&mp[i][j]=='@'){
                dfs(i,j,++ans);
               }
            }
        }
        cout<<ans<<endl;
        }
        return 0;
    }
  • 相关阅读:
    一个C#操作Excel类,功能比较全
    以纯面向对象的JS编写最基本的数据字典案例
    使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
    使用ztree.js,受益一生,十分钟学会使用tree树形结构插件
    shiro和quartz同时存在于项目中,解决冲突的方案
    以最简单的登录为例,诠释JS面向对象的简单实例
    BeJavaGod
    前端这条路怎么走,作为一名后端er,说说我的见解
    安全框架
    文档!重要的事情说第四遍~
  • 原文地址:https://www.cnblogs.com/kls123/p/8516762.html
Copyright © 2011-2022 走看看