问题描述
GeoSurvComp地质调查公司负责检测地下油藏。 GeoSurvComp一次与一个大的矩形区域一起工作,并创建一个网格,将网格划分为多个方块。然后分别分析每个地块,使用传感设备确定该地块是否含有油。含油的情节被称为口袋。如果两个口袋相邻,则它们是同一个油藏的一部分。油藏可能相当大,可能含有大量的口袋。你的工作是确定网格中包含多少个不同的油藏。

输入
输入文件包含一个或多个网格。每个网格以含有m和n的行开始,网格中的行和列的数量由一个空格分隔。如果m = 0,则表示输入结束;否则1 <= m <= 100和1 <= n <= 100.之后是每行有n行的m行(不包括行尾字符)。每个字符对应一个图,既可以代表没有油的`*’,也可以代表一个油袋。

产量
对于每个电网,输出不同油量的数量。如果两个不同的口袋是水平,垂直或对角相邻的,则它们是同一个油藏的一部分。一个油藏不会超过100个口袋。

示例输入
1 1
*
3 5

  • @ * @ *
    ** ** @
  • @ * @ *
    1 8
    @@ **** @ *
    5 5
    **** @
  • @@ * @
  • @ ** @
    @@@ * @
    @@ ** @
    0 0

示例输出
0
1
2
2
思路:刚开始我以为是常规搜索题,当时想着遍历,标记,找相邻的,周围的,但是却发现可能后出现的会连结已经遍历过的,并且那个油田也不好表示,不能超过100不好判断。后来就看了别人学习了一下换了一种思路,找到油田的那个点开始遍历,遍历周围和他成为一个油田的所有满足条件的(包括100),把遍历过的点设为不可遍历。找到一个@就dfs一次,油田数量就增加一次。注意参数的重置问题。
代码如下:

import java.util.Scanner;
public class 杭电1241 {static int d[][]= {{-1,0},{-1,1},{-1,-1},{0,1},{0,-1},{1,0},{1,-1},{1,1}};//八个方向static int m,n,number,value;static char a[][];public static void main(String[] args){Scanner sc=new Scanner(System.in);while(sc.hasNext()){m=sc.nextInt();//行n=sc.nextInt();//列if(m==0&&n==0)break;sc.nextLine();a=new char[m][n];for(int i=0;i<m;i  ){String a1=sc.nextLine();a[i]=a1.toCharArray();}          for(int i=0;i<m;i  ){for(int j=0;j<n;j  ){if(a[i][j]=='@'){a[i][j]='*';number=0;dfs(i,j);value  ;}}}System.out.println(value);value=0;}       }private static void dfs(int x1, int y1) {for(int i=0;i<8;i  )          {if(x1 d[i][1]>=0&&x1 d[i][1]<m&&y1 d[i][0]>=0&&y1 d[i][0]<n)//不超届;{if(a[x1 d[i][1]][y1 d[i][0]]=='@'&&number<100){a[x1 d[i][1]][y1 d[i][0]]='*';dfs(x1 d[i][1],y1 d[i][0]);}}}     }
}

杭电1241java实现dfs相关推荐

  1. 杭电1044java实现dfs bfs

    Collect More Jewels 问题描述 它写在"夫人的书:创世之后,残酷的神摩洛克反抗了造物主马尔杜克的权威.摩尔从马尔杜克那里偷走了众神中所有神器中最强大的一件,也就是叶多尔的护 ...

  2. 杭电1010java实现dfs

    题目: 问题描述 小狗在一个古老的迷宫中发现了一块骨头,这让他着迷了很多.然而,当他拾起它时,迷宫开始动摇,小狗可能感觉到地面下沉.他意识到骨头是一个陷阱,他拼命地试图走出这个迷宫. 迷宫是一个大小为 ...

  3. 杭电毕业bg dfs

    思路:这个就是01背包问题差不多.先按持续时间排序.在dfs 这样想 第一场排队 要还是不要,第二场要还是不要,一直到最后一场求出最优解. 毕业bg Problem Description 每年毕业的 ...

  4. 【ACM】杭电OJ 1241(深度优先搜索小结)

    题目链接:杭电OJ 1241 深度优先搜索问题 深度优先搜索是搜索的手段之一.它从某个状态开始,不断地转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直至找到最终的解. ...

  5. 杭电 HOJ 2553 N皇后问题 解题报告

    回溯法,经典题啊.发现很简单有木有...看代码~用数组保存sum值,否则会超时.杭电也够坑人的... #include <iostream> using namespace std;int ...

  6. 杭电1016Java实现

    主环问题: 问题描述 如图所示,环由n个圆组成.将自然数1,2,-,n分别放入每个圆圈中,并且相邻两个圆圈中的数字总和应为素数. 注意:第一个圆圈的数量应该始终为1. 输入 n(0<n<2 ...

  7. 杭电1108java_按照这个步骤来刷题,迷茫的你两个月亦能成为王者

    原标题:按照这个步骤来刷题,迷茫的你两个月亦能成为王者 作者 | bigsai 来源 | bigsai(ID:bigsai) 前言 大家好,我是bigsai哥哥.最近很多小伙伴问我怎么入门数据结构与算 ...

  8. 杭电1978 How many ways

    How many ways Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  9. 杭电2391--Filthy Rich(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2391 题目意思:在一个n*m的矩阵中,不同的位置有不同重量的黄金,从矩阵的左上角开始,到右下角,只能向 ...

最新文章

  1. u-boot移植:解决 Retry count exceeded; starting again
  2. XCMS | LC/MS and GC/MS Data Analysis
  3. pip install whl
  4. led灯串怎么摆造型_一元包邮的家用LED日光灯泡,究竟是怎么做到的?
  5. linux c 执行shell命令并获取返回结果
  6. 今日浅谈循环 for与while
  7. linux启动系统不显示进度条设置方法
  8. 在观念上进行大的转变
  9. dataset的去重计数 g2_ExcelExcel去重、计数一步到位,这个方法简单到哭
  10. 带有Atomikos示例的Tomcat中的Spring JTA多个资源事务
  11. 邮件服务器两种协议,邮件服务器协议
  12. vb 循环放音乐_为何洒水车一直无限循环播放《兰花草》这首歌呢?
  13. SetWindowPos详解
  14. 【R可视化】你家乡的肯德基都在哪儿?
  15. zerotier使用教程_ZeroTier 初阶教程
  16. magicbook java开发_荣耀MagicBook2019 Intel版值得买吗 MagicBook2019 Intel版笔记本详细评测...
  17. 火车头采集html文档没内容,火车头采集器:编辑任务中常见问题
  18. 【无标题】阿里滑块 通过 x82y接口、dll、源码 返回x5sec,可解决!
  19. java国际化程序_Java 国际化标准程序实现
  20. 【DP】【高精】WZK打雪仗

热门文章

  1. 区块链BaaS云服务(34)新加坡艾达链ASC
  2. 初等数论--同余--Fermat素性检测算法(为什么每次概率改变1/2)
  3. 深度解读DynamIQ架构cache的替换策略
  4. [HOW TO]-centos环境搭建opengrok笔记
  5. [NPUCTF2020]Mersenne twister
  6. Eclipse中Git的使用与Junit单元测试的编写
  7. 【筛素数】P1579 哥德巴赫猜想(升级版)
  8. [SUCTF2018]babyre [ACTF新生赛2020]fungame
  9. 【安全】免密登陆SQLSERVER 之 Token 窃取
  10. 010 数据结构逆向—链表