前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oil Deposts(dfs)

Oil Deposts(dfs)

作者头像
Ch_Zaqdt
发布2019-01-10 11:14:09
2980
发布2019-01-10 11:14:09
举报
文章被收录于专栏:Zaqdt_ACMZaqdt_ACM

思路

题意就是有一大片地方,让你去找里面有多少片油田(八个方向),我们只需要遍历地图,当找到'@'的时候进行dfs,把搜索到的'@'都变成'*'就好了,然后用一个变量进行计数。

AC代码:

代码语言:javascript
复制
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 105;
char MAP[MAXN][MAXN];
int dir[8][2] = {1,0, 0,1, -1,0, 0,-1, 1,1, -1,1, -1,-1, 1,-1};   // 因为有8个方向
int n,m;
int sum;

void dfs(int x,int y){
  MAP[x][y] = '*';                 // 把搜索到的油田标记成空地
  for(int i=0;i<8;i++){            // 8个方向搜索
    int X = x + dir[i][0];
    int Y = y + dir[i][1];
    if(X >= 0 && Y >= 0 && X < n && Y < m && MAP[X][Y] == '@'){
      dfs(X,Y);
    }
  }
  return ;
}

int main()
{
    while(~scanf("%d%d",&n,&m)){
      if(n==0&&m==0) break;
      memset(MAP,0,sizeof(MAP));
      for(int i=0;i<n;i++){           // 给地图赋值
        scanf("%s",MAP[i]);
      }
      sum = 0;                        // sum记得清零
      for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
          if(MAP[i][j] == '@'){       // 遍历到油田时进行搜索
            dfs(i,j);
            sum++;                    // 计数
          }
        }
      }
      printf("%d\n",sum);
    }
    return 0;
}
/***
   [来源] UVa 572
   [题目] Oil Deposits
   [大意]
      经典的DFS题,这个就是求有多少片油田,只要8个方向连在一起的就是一片
      所以只需要遍历地图,当找到一个油田时进行搜索,把搜索到的油田都变成
      空地就好了。详细看代码注释。
   [输入]
      1 1
      *
      3 5
      *@*@*
      **@**
      *@*@*
      1 8
      @@****@*
      5 5 
      ****@
      *@@*@
      *@**@
      @@@*@
      @@**@
      0 0
   [输出] 
      0
      1
      2
      2
*/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档