再解炸弹人——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,很多朋友可能会越来越糊涂,因此本篇打算换一 ...
随机推荐
- (转)WebApi 上传文件
本文转载自:http://www.cnblogs.com/zj1111184556/p/3494502.html public class FileUploadController : ApiCont ...
- 有趣的java小项目------猜拳游戏
package com.aaa; //总结:猜拳游戏主要掌握3个方面:1.人出的动作是从键盘输入的(System.in)2.电脑是随机出的(Random随机数)3.双方都要出(条件判断) import ...
- C# 获取天气 JSON解析
说明: winform获取中国天气的数据 中国天气返回的是JSON数据格式,这里做简单的解析. 用的http://www.weather.com.cn/data/sk/.html获取的天气. [ ...
- oracle删除多个分区表
declare v_date date; v_part_name varchar(); begin v_date := date'2015-2-4'; while v_date >= date' ...
- http响应chunked格式分析
有的时候服务器生成HTTP回应是无法确定信息大小的,这时用Content-Length就无法事先写入长度,而需要实时生成消息长度,这时服务器一般采用Chunked编码. 在进行Chunked编码传输时 ...
- [原创]Java使用反射及自定义注解实现对象差异性比较
Java项目C中 有一处逻辑,对于资源数据(类型为ResourceItem,拥有int/double/boolean/String类型数十个字段),需要比对资源数据每次变更的差异,并描述出变更情况.并 ...
- PHP 环境安装
官方 http://www.php.net/ http://php.net/manual/zh/install.php http://php.net/manual/zh/index.php 下载也就是 ...
- webapi help文档 添加测试功能
在做webapi项目的时候 webapi为我们提供了help文档,开发者可以参考这个文档,但是这个文档缺少测试功能,如果加上一个测试的功能就更加方便了 于是就研究了下写了一段代码,代码比较简单,只要将 ...
- OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱
//参照FreeImage官网给出的CTextrueManager写的加载函数 //官方给的例子是用opengl3.0以下的旧GL写的,没有使用glGenerateMipmap(GL_TEXTURE_ ...
- java中的 equals 与 ==
Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象) Java中equals() 在使用必须与类挂上钩,不能单独使用.有的人这样理解&quo ...