题目描述

天使被恶魔抓住,关在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)相关推荐

  1. 蓝桥杯:铁塔尼号营救(Java版本)

    题目描述'' 铁塔尼号遇险了!他发出了求救信号.距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里. 通过侦测,哥伦比亚号获取了一张海洋图.这张图将海洋部分分化成 n*n 个比较小的单位, ...

  2. java魔箭天使apk_java魔箭天使apk下载|java游戏魔箭天使安装包下载v1.0....

    魔箭天使jar由于输入法的原因,许多人搜索的为魔剑天使,其实原名不是,一款诺基亚老年机上的经典魔幻java游戏,虽然为老套的恶魔与勇者游戏,但是剧情游戏故事却反转不断,rpg游戏元素也是诚意满满,强烈 ...

  3. 杭电oj题目题型分类(转)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  4. HDOJ题目分类大全

    版权声明:本文为博主原创文章,欢迎转载,转载请注明本文链接! https://blog.csdn.net/qq_38238041/article/details/78178043 杭电里面有很多题目, ...

  5. HDU题目分类大全【大集合】

    基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029.  1032.1037.1040.1048.1056.105 ...

  6. TOJ 1335 优先队列

    1335: 营救天使 时间限制(普通/Java):1000MS/10000MS 内存限制:65536KByte 描述 Angel was caught by the MOLIGPY! He was p ...

  7. 杭电OJ题目分类(转载)

    1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 Hero In Maze 广度搜索 ...

  8. hdoj杭电问题分类

    杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...

  9. 转载:Hdu 题目分类

    原址点击 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056. ...

最新文章

  1. TensorFlow练习12: 判断男声女声
  2. 【盘点】北美顶尖学府的人工智能与智能车实验室
  3. 黄斑区隆起原因诊断过程+黄斑反复水肿问题
  4. X86,X86_32,X86_64
  5. AI给植物看病,宾大用TensorFlow做的这款应用造福坦桑尼亚农民
  6. pytorch学习率衰减
  7. 看Panasonic EZ0l21充电器有感
  8. wifi产品调试经验
  9. 大数据的核心价值是什么,主要表现在哪几方面?
  10. mysql order by 排序技巧
  11. 微型打印机方案(包含原理图、PCB和BOM表)
  12. 最简单的 UE 4 C++ 教程 —— 扫描多线轨迹【十六】
  13. MongoDB for Java Programmer ——2
  14. 游戏底特律:变人Loading动画效果实现
  15. flex java oracle_flex+eclipse+tomcat+lcds+jdk+oracle安装步骤和配置
  16. Excel表格规范录入数据
  17. VB 6.0 如何在64位操作系统下运行!
  18. 二本应届生的大学生活、2020年总结(已上岸百度)
  19. 夫妻分居期间一方的债务应该如何处理?
  20. HBuilderX 如何在真机上进行调试

热门文章

  1. error: ‘CV_THRESH_BINARY_INV’ was not declared in this scope / error: ‘CV_THRESH_OTSU’ was not dec
  2. 边工作边考研,最需要注意的事项和经验教训 - 我的在职考研之路
  3. IM即时通讯-4-写扩散下的同步协议方案
  4. python 去掉html转义字符,python处理html转义字符
  5. [翻译] 支持向量回归SVR的介绍
  6. python requests post 二进制流_Python requests 模块
  7. 欢迎大家加入java技术开发讨论群
  8. 路由表(RIB)与转发表(FIB)
  9. 达梦数据库的安装与使用
  10. 40岁,不想上班,干点什么生意合适?