三解炸弹人——DFS
原创
枚举解炸弹人—— 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的更多相关文章
- 再解炸弹人——BFS
原创 之前用了枚举法解炸弹人,题目详情请看我之前的博客:https://www.cnblogs.com/chiweiming/p/9295262.html 利用枚举法是无视地图布局的,枚举法直接全局搜 ...
- 再解炸弹人,dfs&bfs
输入样例: 13 13 3 3##############GG.GGG#GGG.####.#G#G#G#G##.......#..G##G#.###.#G#G##GG.GGG.#.GG##G#.#G# ...
- 判断图连通的三种方法——dfs,bfs,并查集
Description 如果无向图G每对顶点v和w都有从v到w的路径,那么称无向图G是连通的.现在给定一张无向图,判断它是否是连通的. Input 第一行有2个整数n和m(0 < n,m < ...
- (新手向)N皇后问题详解(DFS算法)
非常经典的一道题: N皇后问题: 国际象棋中皇后的势力范围覆盖其所在的行.列以及两条对角线,现在考察如下问题:如何在n x n的棋盘上放置n个皇后,使得她们彼此互不攻击 . 免去麻烦我们这里假定n不是 ...
- 牛客G-指纹锁【一题三解】
链接:https://www.nowcoder.com/acm/contest/136/G来源:牛客网 题目描述 HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁. ...
- 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 ...
- 【62测试】【状压dp】【dfs序】【线段树】
第一题: 给出一个长度不超过100只包含'B'和'R'的字符串,将其无限重复下去. 比如,BBRB则会形成 BBRBBBRBBBRB 现在给出一个区间[l,r]询问该区间内有多少个字符'B'(区间下标 ...
- DFS序 参考许昊然《数据结构漫谈》
网上特别讲DFS序的东西好像很少 太简单了? 实用性不大? 看了论文中 7个经典问题, 觉得挺有用的 原文 "所谓DFS序, 就是DFS整棵树依次访问到的结点组成的序列" &quo ...
- 『ACM C++』HDU杭电OJ | 1416 - Gizilch (DFS - 深度优先搜索入门)
从周三课开始总算轻松了点,下午能在宿舍研究点题目啥的打一打,还好,刚开学的课程还算跟得上,刚开学的这些课程也是复习以前学过的知识,下半学期也不敢太划水了,被各种人寄予厚望之后瑟瑟发抖,只能努力前行了~ ...
随机推荐
- mysql replication /mysql 主从复制原理
一下内容均是根据leader的培训分享整理而成 ************************************我是分割线*********************************** ...
- fatal: read error: Connection reset by peer解决办法
标签(空格分隔): ceph源码安装,git 问题描述: 源码安装ceph,克隆代码时提示如下错误: [root@localhost ~]# git clone git://github.com/ce ...
- 关于ESXI能虚拟出多少个虚拟机和CPU的关系
当你的虚拟机报如下错误的时候: esxi5.0版本最高配置: https://www.vmware.com/content/dam/digitalmarketing/vmware/zh-cn/pdf/ ...
- Xdebug日志文件不显示
Xdebug是一个很强大的调试php的软件,安装也很简单. 1.php_xdebug.dll 放入php目录下的ext文件中 2.php.ini中开启 [Xdebug] extension = &qu ...
- Cassandra 学习七 cassandra研究
https://www.cnblogs.com/bonelee/p/6306079.html Allow filtering: 如果你的查询条件里,有一个是根据索引查询,那其它非索引非主键字段,可以通 ...
- python学习(十六) 测试
测试驱动开发. 16.1 先测试,后编码 16.1.1 精确的需求说明 16.1.2 为改变而计划 16.1.3 测试的4个步骤 16.2 测试工具 16.2.1 doctest 16.2.2 uni ...
- PHP函数(四)-变量函数
变量函数 将声明的函数的函数名赋给一个变量,通过该变量来调用函数 <?php function Calculate($a,$b){ return $a + $b; } echo "计算 ...
- 第二章 Java内存区域与内存溢出异常(待续)
·········
- Oracle11gR2_ADG管理之恢复主库的truncate表实战
备库开启flashback database #关闭备库的同步 SQL> alter database recover managed standby database cancel; Data ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 1 线性回归
作业说明 Exercise 1,Week 2,使用Octave实现线性回归模型.数据集 ex1data1.txt ,ex1data2.txt 单变量线性回归必须实现,实现代价函数计算Computin ...