原创


枚举解炸弹人—— https://www.cnblogs.com/chiweiming/p/9295262.html

BFS解炸弹人—— https://www.cnblogs.com/chiweiming/p/9338597.html

关于题目的介绍请看枚举解炸弹人。

由于枚举存在漏洞,所以采用BFS或者DFS来解题。

此篇博客用DFS解炸弹人,不管是DFS还是BFS都是通过这两种算法的全局搜索功能搜索出地图上的每个点,

再在搜索的基础上逐个点统计出敌人数即可。

Java

import java.util.*;

public class bomb_Three {

    static int n;    //行
static int m; //列
static int save_x;
static int save_y;
static int max=0;
static int dir[][]= {{0,1},{1,0},{0,-1},{-1,0}}; //右、下、左、上
static char maze[][];
static int book[][]; //标记数组 static void Total(int x,int y) { //统计灭敌数 int dx=x;
int dy=y;
int num=0;
while(maze[dx][dy]!='#') { //右
if(maze[dx][dy]=='G') {
num++;
}
dy++;
}
dx=x;
dy=y;
while(maze[dx][dy]!='#') { //下
if(maze[dx][dy]=='G') {
num++;
}
dx++;
}
dx=x;
dy=y;
while(maze[dx][dy]!='#') { //左
if(maze[dx][dy]=='G') {
num++;
}
dy--;
}
dx=x;
dy=y;
while(maze[dx][dy]!='#') { //上
if(maze[dx][dy]=='G') {
num++;
}
dx--;
}
if(num>max) {
max=num;
save_x=x;
save_y=y;
} } static void DFS(int x,int y) { for(int i=0;i<4;i++) {
int dx=x+dir[i][0];
int dy=y+dir[i][1];
if(dx<0 || dx>n || dy<0 || dy>m) {
continue;
}
if(maze[dx][dy]!='.' || book[dx][dy]==1) {
continue;
}
Total(dx,dy);
book[dx][dy]=1;
DFS(dx,dy);
// book[dx][dy]=0; //这里别回溯
} } public static void main(String[] args) { Scanner reader=new Scanner(System.in);
n=reader.nextInt();
m=reader.nextInt();
maze=new char[n][m];
book=new int[n][m];
int start_x=reader.nextInt(); //炸弹人初始位置
int start_y=reader.nextInt();
for(int i=0;i<n;i++) {
String ss=reader.next();
maze[i]=ss.toCharArray();
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
book[i][j]=0;
}
}
Total(start_x,start_y);
DFS(start_x,start_y);
System.out.println("("+save_x+","+save_y+")"+" "+max);
} }

测试用例:

输入:

13 13 3 3

#############
#GG.GGG#GGG.#
###.#G#G#G#G#
#.......#..G#
#G#.###.#G#G#
#GG.GGG.#.GG#
#G#.#G#.#.#.#
##G...G.....#
#G#.#G###.#G#
#...G#GGG.GG#
#G#.#G#G#.#G#
#GG.GGG#G.GG#
#############

输出:
(7,11) 10

16:06:30

2018-07-20

三解炸弹人——DFS的更多相关文章

  1. 再解炸弹人——BFS

    原创 之前用了枚举法解炸弹人,题目详情请看我之前的博客:https://www.cnblogs.com/chiweiming/p/9295262.html 利用枚举法是无视地图布局的,枚举法直接全局搜 ...

  2. 再解炸弹人,dfs&bfs

    输入样例: 13 13 3 3##############GG.GGG#GGG.####.#G#G#G#G##.......#..G##G#.###.#G#G##GG.GGG.#.GG##G#.#G# ...

  3. 判断图连通的三种方法——dfs,bfs,并查集

    Description 如果无向图G每对顶点v和w都有从v到w的路径,那么称无向图G是连通的.现在给定一张无向图,判断它是否是连通的. Input 第一行有2个整数n和m(0 < n,m < ...

  4. (新手向)N皇后问题详解(DFS算法)

    非常经典的一道题: N皇后问题: 国际象棋中皇后的势力范围覆盖其所在的行.列以及两条对角线,现在考察如下问题:如何在n x n的棋盘上放置n个皇后,使得她们彼此互不攻击 . 免去麻烦我们这里假定n不是 ...

  5. 牛客G-指纹锁【一题三解】

    链接:https://www.nowcoder.com/acm/contest/136/G来源:牛客网 题目描述     HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁.   ...

  6. Code force-CodeCraft-20 (Div. 2) D. Nash Matrix 详解(DFS构造)

    D. Nash Matrix time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  7. 【62测试】【状压dp】【dfs序】【线段树】

    第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标 ...

  8. DFS序 参考许昊然《数据结构漫谈》

    网上特别讲DFS序的东西好像很少 太简单了? 实用性不大? 看了论文中 7个经典问题, 觉得挺有用的 原文 "所谓DFS序, 就是DFS整棵树依次访问到的结点组成的序列" &quo ...

  9. 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)

    从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...

随机推荐

  1. linux下创建与删除用户详细步骤 ***

    linux下用户的操作还是相对容易理解的,基本操作如下: 1.新增用户 只有root用户能创建新用户 #useradd user1 新建后将会在/home目录下生成一个与用户名相同的用户主目录.同时会 ...

  2. os模块sys模块-sys.argv命令行参数

    提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于s ...

  3. windows服务器审核失败消息:事件ID: 861 进程标识符:904

    事件ID: 861   进程标识符:904 排查方法: win+R键调出运行窗口, 输入cmd 输入tasklist  /SVC /FI “PID eq 904” 查找进程号904对应的是不是dhcp ...

  4. 什么是Ajax和JSON,它们的优缺点

    什么是Ajax??? 术语Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验. Ajax它是“Asynchronous JavaScript + XML的简写” 定义Ajax: Aj ...

  5. node.js的了解

    在node环境上面运行js代码,js相当于php,node相当于apache环境 第一步装 node 环境1.从官网下载 dmg 文件安装 2.通过命令行安装 需要用到 homebrew(mac上专门 ...

  6. java成神之——集合框架之Maps,Hashtable

    集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...

  7. GET、POST详解 --转自http://hi.baidu.com/richarwu/item/bd43633a6ba62986b611dbcd

    HTTP Get,Post请求详解 请求类型 三种最常见的请求类型是:GET,POST 和 HEAD GET:获取一个文档 大部分被传输到浏览器的html,images,js,css, … 都是通过G ...

  8. VS 配置外部DLL的引用路径【可执行文件的环境路径】

    右键项目,属性->配置属性->调试->环境,在这里写入可执行文件运行时的环境路径,格式为:PATH=ABC,如PATH=$(SolutionDir)/env 这样,我们就可以把运行时 ...

  9. latex中如何引用公式

    在使用latex编辑文章时,经常会需要引用公式.图表等等. 如果我们人为地对这些公式.图表进行编号1-2-3-4,然后在文章中使用Eq(1)-Eq(2)-Eq(3)-Eq(4)去引用这些公式,固然是可 ...

  10. 如何用CURL将文件下载到本地指定文件夹

    若直接调用下载文件的url有重定向,则需先调用第一个方法,获取到跳转后的url,才可直接下载.否则需要手动点击浏览器的下载确定按钮. 调用示例: $imgpath = "http://www ...