package b10;import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;/** 小明是个大胖子,或者说是个大大胖子,如果说正常人占用 1 × 1 的面积,
小明要占用 5 × 5 的面积。
由于小明太胖了,所以他行动起来很不方便。当玩一些游戏时,小明相比
小伙伴就吃亏很多。
小明的朋友们制定了一个计划,帮助小明减肥。计划的主要内容是带小明
玩一些游戏,让小明在游戏中运动消耗脂肪。走迷宫是计划中的重要环节。
朋友们设计了一个迷宫,迷宫可以看成是一个由 n × n 个方阵组成的方阵,
正常人每次占用方阵中 1 × 1 的区域,而小明要占用 5 × 5 的区域。小明的位置
定义为小明最正中的一个方格。迷宫四周都有障碍物。
为了方便小明,朋友们把迷宫的起点设置在了第 3 行第 3 列,终点设置在
了第 n − 2 行第 n − 2 列。
小明在时刻 0 出发,每单位时间可以向当前位置的上、下、左、右移动单
位 1 的距离,也可以停留在原地不动。小明走迷宫走得很辛苦,如果他在迷宫
里面待的时间很长,则由于消耗了很多脂肪,他会在时刻 k 变成一个胖子,只
占用 3 × 3 的区域。如果待的时间更长,他会在时刻 2k 变成一个正常人,只占
用 1 × 1 的区域。注意,当小明变瘦时迷宫的起点和终点不变。
请问,小明最少多长时间能走到迷宫的终点
【输入格式】
输入的第一行包含两个整数 n,k。
接下来 n 行,每行一个由 n 个字符组成的字符串,字符为 + 表示为空地,
字符为 * 表示为阻碍物。
试题 H: 大胖子走迷宫 11
第十届蓝桥杯大赛软件类决赛 Java 大学 B 组
【输出格式】
输出一个整数,表示答案。
【样例输入】
9 5
+++++++++
+++++++++
++=++++++
+++++++++
+++++++++
***+*****
+++++++++
++++++=++
+++++++++
【样例输出】
16* */
public class T8_大胖子走迷宫 {static int y,x,k;static String[][] array;static int[][] dir = {{1,0},{-1,0},{0,1},{0,-1},{0,0}};static int f() {HashMap<String, Integer[]> map = new HashMap<>();int t = 0;int size = 5;Integer[] a = {2,2};map.put("2,2", a);while(true) {Set<String> set0 = map.keySet();Set<String> set = new HashSet<>();for (String key : set0) {set.add(key);}for (String key : set) {Integer[] a2 = map.get(key);int y0 = a2[0];int x0 = a2[1];//              System.out.println(a2[0]);// 五种状态:上下左右不动// 达到最终状态if(y0==y&&x0==x) {return t;}// 确定跟随时间变化的尺寸if(t == k) {size = 3;}if(t == 2*k) {size = 1;}for (int i = 0; i < dir.length; i++) {int _y = dir[i][0];int _x = dir[i][1];// 确定边界距离中心间距int step = (size-1)/2;// 判断移动是否越界if(y0+_y-step<0||y0+_y+step==array.length||x0+_x-step<0||x0+_x+step==array[0].length) {continue;}// 判断移动之后是否有障碍物boolean can = true;outloop:for (int j = y0+_y-step; j <= y0+_y+step; j++) {for (int k = x0+_x-step; k <= x0+_x+step; k++) {if(array[j][k].equals("*")) {can = false;break outloop;};}}if(can) {Integer[] a3 = {y0+_y,x0+_x};map.put(a3[0]+","+a3[1], a3);}}}t++;}}public static void main(String[] args) {Scanner s = new Scanner(System.in);int n = s.nextInt();k = s.nextInt();s.nextLine();y = n-3;x = n-3;array = new String[n][];for (int i = 0; i < n; i++) {String str = s.nextLine();array[i] = str.split("");}System.out.println(f());}
}/** 思路:广度优先搜索,得到在t时刻内可能存在的位置和此时的大小size* 碰到问题:* 1.最开始使用深度优先搜索可能会在原地陷入死循环一直向下知道内存溢出* 2.广度优先搜索使用 List 或 stack 保存t时刻内可能处于的所有时刻,会有重复值存在例如不同的两个位置下一步可能会走到相同位置,采用 map 集合排除这种情况* 3.set集合是接口,不能使用Object的clone方法* * */

蓝桥杯国赛10-JavaB-8-大胖子走迷宫相关推荐

  1. 2019年第十一届蓝桥杯国赛JavaB组第H题——“大胖子走迷宫”题目及解析

    测试样例 Input: 9 5 +++++++++ +++++++++ +++++++++ +++++++++ +++++++++ ***+***** +++++++++ +++++++++ ++++ ...

  2. Java B组蓝桥杯第十届国赛:大胖子走迷宫

    试题 H: 大胖子走迷宫 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] 小明是个大胖子,或者说是个大大胖子,如果说正常人占用 1 × 1 的面积, 小明要占用 5 ...

  3. 蓝桥杯国赛-大胖子走迷宫

    广度优先搜索,见注释 五个状态:上下左右停 题目提交 import java.util.ArrayDeque; import java.util.Queue; import java.util.Sca ...

  4. 第十二届蓝桥杯国赛真题+题解 Python

    文章目录 写在前面 试题A:带宽 试题 B: 纯质数 试题C: 完全日期 试题D: 最小权值 试题 E: 大写 试题 F: 123 试题 G: 冰山 试题 H: 和与乘积 试题 I: 二进制问题 试题 ...

  5. 蓝桥杯国赛五一训练赛(1)

    蓝桥杯国赛五一训练赛(1)(链接) 问题 A: 费解的开关 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变 ...

  6. 2020十一届蓝桥杯国赛二等奖Java B组

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 参考博客https://blo ...

  7. 49-2017年第八届蓝桥杯国赛试题及详解(Java本科B组)

    蓝桥杯历年真题题目及题解目录汇总(推荐) 蓝桥杯算法模板常用套路及API等个人总结 ---------------------------------------------------------- ...

  8. 太空大战-第14届蓝桥杯国赛Scratch真题中级组第6题

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第148讲. 太空大战,本题是2023年5月28日上午 ...

  9. 第九届蓝桥杯国赛总结

    蓝桥杯国赛算是结束了,也是借着这个机会去北京玩了两天,总体老说国赛蓝桥杯对我的感触还是非常深的,因为这是我第一次参加这样大规模的比赛 当时,检查完了准考证.身份证还有签上了名字之后,我们就进了机房,但 ...

  10. 蓝桥杯国赛知识点汇总

    蓝桥杯国赛备赛总结知识点,以老师给的为原型,添加自己理解,供大家参考,后期不定时更新. 基础 1.熟练掌握API1.8常用方法 2.大数(高精度)加减乘除 3.并查集 模板: public class ...

最新文章

  1. PHP数组式访问接口ArrayAccess
  2. 细数高光时刻,2020全球科技巨头如何激战AI?
  3. python可以做什么项目-适合Python 新手的5大练手项目,你练了么?
  4. Javah 常见错误记录
  5. 计算机组装图示,台式机组装教程-台式机DIY装机教程示意图(自己动手组装电脑)...
  6. 雷达的工作原理示意图_电磁阀的构成和工作原理示意图
  7. HAproxy开启日志记录
  8. 【Redis3】基于Redis sentinel的自动failover主从复制
  9. Linux下如何查找sqlnet.ora 和listener.ora 和tnsnames.ora 配置文件的目录
  10. GO随笔-Web简读
  11. 一文掌握有序logistic回归分析
  12. a标签下载pdf文件
  13. 不用for循环快速合并txt文本文件
  14. html修改字体大小到10像素,ps怎么修改字体大小
  15. java keystore php,KeyStoreSpi
  16. 分享5个高质无损音乐网站,歌曲很丰富,爱听歌的小伙伴有耳福了
  17. 树莓派CM4基于emmc安装Ubuntu系统及初始配置
  18. 华为麒麟9000性能提升幅度大,但恐难成安卓一哥
  19. 智能手机功能设计实现
  20. 【性能监控】TTI (Time to interactive)

热门文章

  1. surface go 安装纯AndroidX86系统
  2. 斯皮尔曼相关系数范围_Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现
  3. android https cer证书转换BKS
  4. 【已解决】 ‘gbk‘ codec can‘t decode byte 0x93 in position 3136: illegal multibyte sequence
  5. 天空盒六面图片+左右眼3D全景图片
  6. Composer学习
  7. C语言-make概述
  8. 开发届这些公司的自白
  9. 给定平面上的n个点,求最多有多少个点共线
  10. java-URL短连接的生成(保证生成的唯一性)