营救天使(java)
题目描述
天使被恶魔抓住,关在N行M列的矩阵的方格中,我们现在要从起始方格出发,去营救天使。我们每次只能在矩阵中往上或往下或往左或往右移动一格,且需耗时1秒。有些方格中有障碍物,不能进入;有些方格中有小鬼守卫,把它杀死还需另外耗时1秒。我们需要计算,到达天使所在方格的最少秒数。
输入
第1行是2个整数N、M,分别表示矩阵的行数和列数。
接下去是N行,每行M个字符,其中.表示可以进入的普通方格,x表示有小鬼守卫的方格,#表示有障碍物的方格,r表示起始方格,a表示天使所在方格。输出
如果能够营救,输出最少秒数,如果不能,输出-1。
样例输入
7 8 #.#####. #.a#..r. #..#x... ..#..#.# #...##.. .#...... ........
样例输出
13
思路
从起点开始沿着可行的四个方向进行广搜,当走到有怪物的地方需要时间再+1,遇到已经访问过的地方需要判断一下时间是否可以更少,将每个地方的时间都登记为可行的最小值即可
代码
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class Main {static int n,m;static char[][] map;static boolean[][] visit;static int[][] move = {{1,0},{-1,0},{0,1},{0,-1}};static int[][] time;public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();m = in.nextInt();map = new char[n][m];visit = new boolean[n][m];time = new int[n][m];String s = in.nextLine();for(int i=0;i<n;i++) {s=in.nextLine();for(int j=0;j<m;j++) {map[i][j]=s.charAt(j);}}for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(map[i][j]=='r')BFS(i,j);}public static void BFS(int x,int y) {Queue<Node> queue = new LinkedList<Node>();Node start = new Node(x,y,0,0);queue.offer(start);visit[x][y]=true;int t=0;while(!queue.isEmpty()) {Node next = queue.poll();for(int i=0;i<4;i++) {x=next.x+move[i][0];y=next.y+move[i][1];t=time[next.x][next.y];if(x>=0 && x<n && y>=0 && y<m && map[x][y]!='#') {t++;if(map[x][y]=='x')t++;if(visit[x][y]) {if(t<time[x][y]) {time[x][y]=t;}continue;}if(map[x][y]=='a') {System.out.println(t);return;}queue.offer(new Node(x,y,next.x,next.y));visit[x][y]=true;time[x][y]=t;}}}System.out.println(-1);}
}class Node{int x;int y;int prex;int prey;Node(int x,int y,int prex,int prey){this.x=x;this.y=y;this.prex=prex;this.prey=prey;}
}
营救天使(java)相关推荐
- 蓝桥杯:铁塔尼号营救(Java版本)
题目描述'' 铁塔尼号遇险了!他发出了求救信号.距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里. 通过侦测,哥伦比亚号获取了一张海洋图.这张图将海洋部分分化成 n*n 个比较小的单位, ...
- java魔箭天使apk_java魔箭天使apk下载|java游戏魔箭天使安装包下载v1.0....
魔箭天使jar由于输入法的原因,许多人搜索的为魔剑天使,其实原名不是,一款诺基亚老年机上的经典魔幻java游戏,虽然为老套的恶魔与勇者游戏,但是剧情游戏故事却反转不断,rpg游戏元素也是诚意满满,强烈 ...
- 杭电oj题目题型分类(转)
1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...
- HDOJ题目分类大全
版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...
- HDU题目分类大全【大集合】
基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.105 ...
- TOJ 1335 优先队列
1335: 营救天使 时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte 描述 Angel was caught by the MOLIGPY! He was p ...
- 杭电OJ题目分类(转载)
1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...
- hdoj杭电问题分类
杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...
- 转载:Hdu 题目分类
原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...
最新文章
- TensorFlow练习12: 判断男声女声
- 【盘点】北美顶尖学府的人工智能与智能车实验室
- 黄斑区隆起原因诊断过程+黄斑反复水肿问题
- X86,X86_32,X86_64
- AI给植物看病,宾大用TensorFlow做的这款应用造福坦桑尼亚农民
- pytorch学习率衰减
- 看Panasonic EZ0l21充电器有感
- wifi产品调试经验
- 大数据的核心价值是什么,主要表现在哪几方面?
- mysql order by 排序技巧
- 微型打印机方案(包含原理图、PCB和BOM表)
- 最简单的 UE 4 C++ 教程 —— 扫描多线轨迹【十六】
- MongoDB for Java Programmer ——2
- 游戏底特律:变人Loading动画效果实现
- flex java oracle_flex+eclipse+tomcat+lcds+jdk+oracle安装步骤和配置
- Excel表格规范录入数据
- VB 6.0 如何在64位操作系统下运行!
- 二本应届生的大学生活、2020年总结(已上岸百度)
- 夫妻分居期间一方的债务应该如何处理?
- HBuilderX 如何在真机上进行调试
热门文章
- error: ‘CV_THRESH_BINARY_INV’ was not declared in this scope / error: ‘CV_THRESH_OTSU’ was not dec
- 边工作边考研,最需要注意的事项和经验教训 - 我的在职考研之路
- IM即时通讯-4-写扩散下的同步协议方案
- python 去掉html转义字符,python处理html转义字符
- [翻译] 支持向量回归SVR的介绍
- python requests post 二进制流_Python requests 模块
- 欢迎大家加入java技术开发讨论群
- 路由表(RIB)与转发表(FIB)
- 达梦数据库的安装与使用
- 40岁,不想上班,干点什么生意合适?