• 题目oil Deposits(油田) 基础DFS(深度搜索)


     上一次基本了解了下BFS,这次又找了个基本的DFS题目来试试水,DFS举个例子来说就是 一种从树的最左端开始一直搜索到最底端,然后回到原端再搜索另一个位置到最底端,也就是称为深度搜索的DFS--depth first search,话不多说,直接上题了解:

    Description:
    某石油勘探公司正在按计划勘探地下油田资源,工作在一片长方形的地域中。他们首先将该地域划分为许多小正方形区域,然后使用探测设备分别探测每一块小正方形区域内是否有油。若在一块小正方形区域中探测到有油,则标记为’@’,否则标记为’*’。如果两个相邻区域都为1,那么它们同属于一个石油带,一个石油带可能包含很多小正方形区域,而你的任务是要确定在一片长方形地域中有多少个石油带。 所谓相邻,是指两个小正方形区域上下、左右、左上右下或左下右上同为’@’。
    Input:
    输入数据将包含一些长方形地域数据,每个地域数据的第一行有两个正整数m和n,表示该地域由m*n个小正方形所组成,如果m为0,表示所有输入到此结束;否则,后面m(1≤m≤100)行数据,每行有n(1≤n≤100)个字符,每个字符为’@’或’*’,表示有油或无油。每个长方形地域中,’@’的个数不会超过100。
    Output:
    每个长方形地域,输出油带的个数,每个油带值占独立的一行。油带值不会超过100。
    Sample Input:
    1 1
    *
    3 5
    *@*@*
    **@**
    *@*@*
    1 8
    @@****@*
    5 5
    ****@
    *@**@
    *@**@
    @@@*@
    @@**@
    0 0
    Sample Output:
    0
    1
    2
    2

    思路:

    搜索到一个“@”后开始搜索其周围的“@”一直到无法搜索到为止,从第一个“@”开始将其本身和其他与之连接的“@”变为成“ * ”,防止重复。

    实验代码:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 char maps[101][101];//定义油田
     6 int m,n,cnt=0;//cnt为“感染”次数(油田数量)
     7 
     8 void dfs(int x,int y)
     9 {
    10     if(maps[x][y]!='@'||x<0||y<0||x>m||y>n)//判断是否越界和是否为油田
    11     return;
    12     
    13     else
    14     {
    15         maps[x][y]='*'; //将其标记
    16         for(int i=-1;i<=1;i++)
    17         for(int j=-1;j<=1;j++)
    18         dfs(x+i,y+j);//将其为中心的周围八格进行搜索
    19      } 
    20      
    21 }
    22 
    23 int main (int argc,const char * argv[])
    24 {
    25     while(scanf("%d %d",&m,&n))
    26     {
    27         if(m==0||n==0)return 0;
    28         cnt=0;
    29         for(int i=0;i<m;i++)
    30         scanf("%s",maps[i]);
    31         
    32         for(int i=0;i<m;i++)
    33         for(int j=0;j<n;j++)
    34         if(maps[i][j]=='@')//搜索油田
    35         {
    36             cnt++;//每进入一次则代表一块油田
    37             dfs(i,j);
    38         }
    39         cout<<cnt<<endl;
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    记第一次重装系统
    数值运算_第1周
    更新驱动时显示失败,错误代码56
    Tomcat安装教程及常见错误解决方法
    中国学术界之特点
    Mac 安装qtbingdings出现error 解决方式
    关于xtea加密解密算法
    关于消息认证码
    2、关于协议数据包的设计
    关于协议标识符的实现方法
  • 原文地址:https://www.cnblogs.com/xiangqi/p/10485211.html
Copyright © 2020-2023  润新知