zoukankan      html  css  js  c++  java
  • 石油探测(DFS)

    题目

    Description
    地质探测公司负责探测地下石油资源,每次在一块矩形的区域上查找。探测人员用把这块矩形区域分成 了N X M个正方形小块,然后对每个正方形小块分别进行分析,经过分析之后,为每个小块都做了一个标记,如果一个小块地下发现有石油,则用“@”标记,否则用”.标记”。如果两个含有石油的小块是相邻的,那么它们属于同一块石油地,这里的相邻包括水平,垂直,或者对角相邻。给定一块已经标记过的矩形区域,你的任务是找出这块区域上的石油地的个数

    Input
    本题有多组输入数据。对于每一组输入数据,第一行输入两个数M,N,(1<=M,N<=100),接下来是M行,每行含有N个字符,每个字符要么是“@”,要么是”*”。

    Output
    对于每组数据,输出一行,包含一个整数,它表示石油的地块数

    Sample Input
    Original Transformed
    1 1
    *
    3 5
    *@*@*
    **@**
    *@*@*
    1 8
    @@****@*
    5 5 
    ****@
    *@@*@
    *@**@
    @@@*@
    @@**@
    0 0

    Sample Output
    Original Transformed
    0
    1
    2
    2

    分析:直接dfs把相连的@全部变成*。

    代码

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<string>
    #include<cstring>
    using namespace std;
    int book[120][120],sum
    int next1[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
    char num[120][120];
    int n,m;
    void dfs(int x,int y)
    {
        int tx,ty;
        num[x][y]='*';
        for(int k=0;k<8;k++)
        {
            tx=x+next1[k][0];
            ty=y+next1[k][1];
            if(tx<0||tx>=n||ty<0||ty>=m)
                continue;
            if(num[tx][ty]=='@'&&book[tx][ty]==0)
            {
                book[tx][ty]=1;
                dfs(tx,ty);
            }
        }
        return ;
    }
    int main()
    {
        while(~scanf("%d%d",&n,&m))
        {
            sum=0;
            memset(book,0,sizeof(book));
            for(int i=0;i<n;i++)
                scanf("%s",num[i]);
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                    if(num[i][j]=='@')
                    {
                        sum++;
                        book[i][j]=1;
                        dfs(i,j);
                    }
           printf("%d
    ",sum);
        }
        return 0;
    }
    


    
    

  • 相关阅读:
    《深度探索C++对象模型》1
    《C++标准库》
    关于多级分类的封装
    git常用命令
    使用BigDecimal进行精确运算
    关于强制装换
    page分页
    pageContext.request.contextPath 和 request.getContextPath()
    springMVC + mybatis 搜索 分页等
    mybatis 动态sql
  • 原文地址:https://www.cnblogs.com/nickqiao/p/7583379.html
Copyright © 2011-2022 走看看