HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)
Oil Deposits
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0
1
2
2
方法一:DFS(深度优先搜索)
import java.io.*;
import java.util.*;
public class Main {
public char ch[][];
public int fx[]={1,1,1,-1,-1,-1,0,0};
public int fy[]={0,1,-1,0,1,-1,1,-1};
public int m,n;
public static void main(String[] args) {
new Main().work();
}
public void work(){
Scanner sc=new Scanner(new BufferedInputStream(System.in));
while(sc.hasNext()){
m=sc.nextInt();
n=sc.nextInt();
ch=new char[m][n];
if(m==0)
System.exit(0);
for(int i=0;i<m;i++){
String s=sc.next();
ch[i]=s.toCharArray();
}
int toal=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(ch[i][j]=='@'){
toal++;
dfs(i,j);
}
}
}
System.out.println(toal);
}
}
public void dfs(int x,int y){
for(int i=0;i<8;i++){
int px=x+fx[i];
int py=y+fy[i];
if(check(px,py)){
ch[px][py]='*';
dfs(px,py);
}
}
}
public boolean check(int px,int py){
if(px<0||px>m-1||py<0||py>n-1||ch[px][py]!='@')
return false;
return true;
}
}
方法二BFS(广度优先搜索)
import java.io.*;
import java.util.*;
public class Main {
public int m,n;
public char ch[][];
public Queue<Bnode> list=new LinkedList<Bnode>();
public int fx[]={1,1,1,-1,-1,-1,0,0};
public int fy[]={0,1,-1,0,1,-1,1,-1};
public static void main(String[] args) {
new Main().work();
}
public void work(){
Scanner sc=new Scanner(new BufferedInputStream(System.in));
while(sc.hasNext()){
list.clear();
m=sc.nextInt();
n=sc.nextInt();
if(m==0)
System.exit(0);
ch=new char[m][n];
for(int i=0;i<m;i++){
String s=sc.next();
ch[i]=s.toCharArray();
}
int total=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(ch[i][j]=='@'){
total++;
Bnode bnode=new Bnode();
bnode.x=i;
bnode.y=j;
list.add(bnode); BFS();
}
}
}
System.out.println(total);
}
}
public void BFS(){
while(!list.isEmpty()){
Bnode bnode=list.poll();
for(int i=0;i<8;i++){
int px=bnode.x+fx[i];
int py=bnode.y+fy[i];
if(check(px,py)){
ch[px][py]='*';
Bnode t=new Bnode();
t.x=px;
t.y=py;
list.add(t);
}
}
}
}
public boolean check(int px,int py){
if(px<0||px>m-1||py<0||py>n-1||ch[px][py]!='@')
return false;
return true;
}
}
class Bnode {
int x;
int y;
}
HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)的更多相关文章
- HDOJ(HDU).1241 Oil Deposits(DFS)
HDOJ(HDU).1241 Oil Deposits(DFS) [从零开始DFS(5)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
- HDU 1241 Oil Deposits (DFS/BFS)
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- HDU 1241 Oil Deposits DFS搜索题
题目大意:给你一个m*n的矩阵,里面有两种符号,一种是 @ 表示这个位置有油田,另一种是 * 表示这个位置没有油田,现在规定相邻的任意块油田只算一块油田,这里的相邻包括上下左右以及斜的的四个方向相邻的 ...
- HDU 1241 Oil Deposits (DFS or BFS)
链接 : Here! 思路 : 搜索判断连通块个数, 所以 $DFS$ 或则 $BFS$ 都行喽...., 首先记录一下整个地图中所有$Oil$的个数, 然后遍历整个地图, 从油田开始搜索它所能连通多 ...
- hdu 1241 Oil Deposits(DFS求连通块)
HDU 1241 Oil Deposits L -DFS Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & ...
- HDU 1241 Oil Deposits --- 入门DFS
HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...
- DFS(连通块) HDU 1241 Oil Deposits
题目传送门 /* DFS:油田问题,一道经典的DFS求连通块.当初的难题,现在看上去不过如此啊 */ /************************************************ ...
- HDU 1241 Oil Deposits(石油储藏)
HDU 1241 Oil Deposits(石油储藏) 00 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Probl ...
- hdu 1241:Oil Deposits(DFS)
Oil Deposits Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total ...
随机推荐
- zoo.cfg配置
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳时间 Zo ...
- spm中头动绘图的理解,自带数据集
1.在得到头动评估的数据基础上,可以汇出头动变化的折线图. 运行本程序需要下载相应的实例数据 headmove_data.txt 头动是fMRI的一个重要问题,该程序画出了某个被试进行扫描时头动的具体 ...
- UML时序图
时序图定义 : 描述了对象之间传递消息的时间顺序, 用来表示用例中的行为顺序, 是强调消息时间顺序的交互图; 时序图描述的事物: 时序图描述系统中类和类之间的交互, 将这些交互建模成消息交换, 时序图 ...
- MornUI 源码阅读笔记
1. label的mouseChildren属性为true,但label本身是不需要监听textfield的任何事件的, 个人猜测是为了给TextInput, TextArea用的,因为后两者需要监听 ...
- Oracle RAC OCR 与健忘症
OCR就好比Windows的一个注册表,存储了所有与集群,RAC数据库相关的配置信息.而且是公用的配置,也就是说多个节点共享相同的配置信息.因此该配置应当存储于共享磁盘.本文主要基于Oracle 10 ...
- SQL Server数据类型与SDE库表sde_type对照表
SDE_column_registry 表管理所有注册列. 警告:如果使用 SQL 界面更改列定义,SDE_column_registry 表中的记录将不会更新.这可能导致之后的任何数据导出失败. S ...
- android定时三种方式
一.采用Handler与线程的sleep(long)方法二.采用Handler的postDelayed(Runnable, long)方法三.采用Handler与timer及TimerTask结合的方 ...
- struts2中错误处理
定义一个 package,然后其他package都继承 这个package struts-global 就 有了这个错误处理功能了 然后再自己写个类 struts.xml <constant n ...
- loadrunner下检查点乱码情况处理
对于很多用过LR的人来说,乱码一直是很纠结的事情,尤其是对新手来说.网上给的解决方法是在录制的时候勾选UTF-8选项,但是似乎并没有解决. 对于用户名为中文或者检查点为中文的情况,我们又该如何去处理呢 ...
- signal()函数
转自:http://blog.csdn.net/sddzycnqjn/article/details/7285760 1. 信号概念 信号是进程在运行过程中,由自身产生或由进程外部发过来的消息(事件) ...