再解炸弹人——BFS
原创
之前用了枚举法解炸弹人,题目详情请看我之前的博客:https://www.cnblogs.com/chiweiming/p/9295262.html
利用枚举法是无视地图布局的,枚举法直接全局搜索地图,一遇到空地就从4个方向统计敌人数目,但是有些空地
被敌人所包围,炸弹人是无法进去的,而这些被敌人包围的点若是能炸死敌人最多的点则结果救就会错误,所以可
以先用广度优先搜索(DFS也可以)搜索出哪些点炸弹人可以到达,然后在可到达的点的基础上统计可炸死敌人数。
不熟悉BFS算法请看我博客:https://www.cnblogs.com/chiweiming/p/9337316.html
Java:
import java.util.*;
public class bomb_Two {
static int n; //行
static int m; //列
static char maze[][]; //存储地图
static int book[][]; //标记
static int x[]; //队列横坐标
static int y[]; //队列纵坐标
static int step[]; //步数
static int max=0; //存储最大敌人数
static int save_x; //存储目标横坐标
static int save_y; //存储目标纵坐标
static void Totall(int x,int y) { //统计可消灭敌人数
int total=0;
int dx=x;
int dy=y;
while(maze[dx][dy]!='#') { //右
if(maze[dx][dy]=='G') {
total++;
}
dy++;
}
dx=x;
dy=y;
while(maze[dx][dy]!='#') { //下
if(maze[dx][dy]=='G') {
total++;
}
dx++;
}
dx=x;
dy=y;
while(maze[dx][dy]!='#') { //左
if(maze[dx][dy]=='G') {
total++;
}
dy--;
}
dx=x;
dy=y;
while(maze[dx][dy]!='#') { //上
if(maze[dx][dy]=='G') {
total++;
}
dx--;
}
if(total>max) {
save_x=x;
save_y=y;
max=total;
}
}
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
n=reader.nextInt();
m=reader.nextInt();
int start_x=reader.nextInt(); //炸弹人初始位置
int start_y=reader.nextInt();
x=new int[n*m];
y=new int[n*m];
step=new int[n*m];
int dir[][]= {{0,1},{1,0},{0,-1},{-1,0}}; //右、下、左、上
int head=0; //头结点
int tail=0; //尾结点
maze=new char[n][m];
book=new int[n][m];
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;
}
}
Totall(start_x,start_y); //统计初始位置可灭敌数
//初始位置入队列
x[tail]=start_x;
y[tail]=start_y;
step[tail]=0;
book[start_x][start_y]=1;
tail++; //尾指针后移
while(head<=tail) {
for(int i=0;i<4;i++) {
int dx=x[head]+dir[i][0];
int dy=y[head]+dir[i][1];
if(dx<0 || dx>n || dy<0 || dy>m) { //越界判断
continue;
}
if(maze[dx][dy]!='.' || book[dx][dy]==1) { //障碍点和空地判断
continue;
}
//符合条件
x[tail]=dx;
y[tail]=dy;
step[tail]=step[head]+1;
book[dx][dy]=1;
tail++;
Totall(dx,dy); //统计敌人数
}
head++; //出队列
}
System.out.println("("+save_x+","+save_y+")"+" "+max);
}
}
12:07:58
2018-07-20
再解炸弹人——BFS的更多相关文章
- 再解炸弹人,dfs&bfs
输入样例: 13 13 3 3##############GG.GGG#GGG.####.#G#G#G#G##.......#..G##G#.###.#G#G##GG.GGG.#.GG##G#.#G# ...
- 三解炸弹人——DFS
原创 枚举解炸弹人—— https://www.cnblogs.com/chiweiming/p/9295262.html BFS解炸弹人—— https://www.cnblogs.com/chiw ...
- Jenkins通过FTP上传站点太多文件导致太慢且不稳定,切换为压包上传再解压的思路(asp.net)
在本地先处理好要上传的站点文件之后,可能会因为一些网页切图导致ftp上传不稳定,中断,或者文件占用的问题. 那么换了一种实现思路,要借助jenkins的工具jenkins-cli.jar. 解决思路: ...
- 工控安全入门(三)—— 再解S7comm
之前的文章我们都是在ctf的基础上学习工控协议知识的,显然这样对于S7comm的认识还不够深刻,这次就做一个实战补全,看看S7comm还有哪些值得我们深挖的地方. 本篇是对S7comm的补全和实战,阅 ...
- Vijos 1206 CoVH之再破难关 [BFS] [位运算]
1.题意:一个由01组成的4*4的矩阵,可以实现相邻元素交换位置的操作,给出初试状态和目标状态,试求最少操作数的方案: 2.输入输出:输入给出初试矩阵和目标矩阵:要求输出最小操作的次数: 3.分析:输 ...
- 再解java中的String
今天看到一篇文章中,写了关于java中的String.我看了后,是我从学java来觉得是最好的一篇关于String类的文章.看了这篇文章你就会对String的认识会提高一个层次.故将原作者的文章特意转 ...
- Django ORM中使用update_or_create功能再解
以前,我解过这个问题,现在百度搜索,发了像也只能找到我这个帖子. https://www.cnblogs.com/aguncn/p/4922654.html 今天,看了看官方文档,关于这个update ...
- KMP算法再解 (看毛片算法真是人如其名,哦不,法如其名。)
KMP算法主要解决字符串匹配问题,其中失配数组next很关键: 看毛片算法真是人如其名,哦不,法如其名. 看了这篇博客,转载过来看一波: 原博客地址:https://blog.csdn.net/sta ...
- this指针再解
this.new.call和apply的相关问题 讲解this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一 ...
随机推荐
- Linux环境变量从用户配置改为系统配置
部署了一个新的tomcat到一个新的用户下,发下启动失败了 /home/personal/apache-tomcat/bin/catalina.sh: line 434: /usr/lib/jvm/j ...
- Voting and Shuffling to Optimize Atomic Operations
2iSome years ago I started work on my first CUDA implementation of the Multiparticle Collision Dynam ...
- 对于global的介绍
抄自http://veniceweb.googlecode.com/svn/trunk/public/daily_tech_doc/erlang_global_20091109.txt 1. 介绍:这 ...
- Linux安装JRE tomcat配置java环境
安装JRE 到http://www.oracle.com/technetwork/java/javase/downloads/index.html下载JRE软件. 1.wget http://down ...
- Ubuntu apt-get卸载小记
过sudo apt-get install xxxx 安装软件后,总是无法卸载干净,这里以Apache 为例,提供方法:首先sudo apt-get remove apache2再sudo apt-g ...
- 【转】使用JMeter 完成常用的压力测试(三)
使用JMeter 完成常用的压力测试 发布时间: 2008-9-27 15:33 作者: 未知 来源: 网络转载 字体: 小 中 大 | 上一篇 下一篇 | 打印 | 我要投稿 ...
- VirtualBox 虚拟机 centos7 下 设置静态ip 并支持 xshell 远程登陆的设置方法
1.设置虚拟机使用“桥接模式” 2.使用 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 打开配置文件(其中 enp0s3 是你的linux的网卡名,在 ...
- 1110 Complete Binary Tree
1110 Complete Binary Tree (25)(25 分) Given a tree, you are supposed to tell if it is a complete bina ...
- Oracle 常见hint
Hints 应该慎用,收集相关表的统计信息,根据执行计划,来改变查询方式 只能在SELECT, UPDATE, INSERT, MERGE, or DELETE 关键字后面,只有insert可以用2个 ...
- SQL Server专题
SQL Server 2005/2008 一.连接异常 在C#代码中调用Open()方法打开数据库连接时(账户为sa),出现异常:异常信息如下: 在与 SQL Server 建立连接时出现与网络相关的 ...