广度优先搜索,见注释
五个状态:上下左右停
题目提交

import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Scanner;public class 大胖子走迷宫 {static int[][] map;//地图static Node[][] path;//记录路径static int[] xs = { 1, 0, -1, 0 };//坐标移动static int[] ys = { 0, 1, 0, -1 };static int n;static int k;public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();k = sc.nextInt();map = new int[n][n];path = new Node[n][n];for (int i = 0; i < n; i++) {String str = sc.next();for (int j = 0; j < n; j++) {map[i][j] = str.charAt(j);}}sc.close();System.out.println(bfs());//输出路径Node node = path[n - 3][n - 3];while (node != path[2][2]) {System.out.println(node);node = path[node.x][node.y];}}static int bfs() {Queue<Node> q = new ArrayDeque<>();q.add(new Node(2, 2, 0));int[][] vis = new int[n][n];// 判重,但是可以在原地停留vis[2][2] = 1;while (!q.isEmpty()) {Node node = q.poll();int dis = node.dis;int r;if (dis < k)r = 2;else if (dis < (k << 1))r = 1;elser = 0;dis++;if(r > 0) {// 表示原地停留,把时刻加一后放回队列,但是当r等于零时就没有等待的必要了q.offer(new Node(node.x, node.y, dis));}for (int i = 0; i < 4; i++) {int x = node.x + xs[i];int y = node.y + ys[i];if (x + r < n && x - r >= 0 && y + r < n && y - r >= 0) {if (vis[x][y] == 0 && check(x, y, r)) {q.offer(new Node(x, y, dis));if (path[x][y] == null)path[x][y] = node;if (x == n - 3 && y == n - 3)return dis;vis[x][y] = 1;}}}}return -1;}// 检查是否碰到障碍物static boolean check(int x, int y, int r) {for (int i = x - r; i <= x + r; i++) for (int j = y - r; j <= y + r; j++) if (map[i][j] == '*')return false;return true;}static class Node {//坐标及时刻int x;int y;int dis;public Node(int x, int y, int dis) {this.x = x;this.y = y;this.dis = dis;}public Node() {}@Overridepublic String toString() {return "Node [x=" + x + ", y=" + y + ", dis=" + dis + "]";}}
}

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

  1. 蓝桥杯国赛10-JavaB-8-大胖子走迷宫

    package b10;import java.util.HashMap; import java.util.HashSet; import java.util.Scanner; import jav ...

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

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

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

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

  4. 蓝桥杯_大胖子走迷宫

    题目描述 小明是个大胖子,或者说是个大大胖子,如果说正常人占用 1×11×1 的面积,小明要占用 5×55×5 的面积. 由于小明太胖了,所以他行动起来很不方便.当玩一些游戏时,小明相比小伙伴就吃亏很 ...

  5. 蓝桥杯国赛 C/C++ ABC组题解(第四届 ~ 第十二届)

    2020年第十一届蓝桥杯国赛 题号 类型 C++ A组 C++ B组 C++ C组 试题A 结果填空 合数个数 美丽的 2 美丽的 2 试题B 结果填空 含 2 天数 (日期处理) 扩散 (BFS) ...

  6. 第十届蓝桥杯国赛java_2019年第十届蓝桥杯国赛总结(JavaA组)

    JavaA组国二,可以报销了~ JA死亡之组可不是盖的,rank12的排名还是拿不到国一啊(只有五个.. 出成绩的一刻波澜不惊,毕竟去年有国一了不慌哈哈哈 不过对我来说这个结果还算意料之外吧,毕竟大三 ...

  7. 2019年蓝桥杯国赛总结

    2019年蓝桥杯国赛北京站,我们是C/C++B组,赛点在中国农业大学东校区,比赛时间为5月25日下午14点--下午18点,赛完26日上午出成绩,且26日下午13点--16点有个峰会可以凭蓝桥杯准考证领 ...

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

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

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

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

最新文章

  1. 700 页的机器学习笔记火了!完整版开放下载
  2. MySLQ排序后标记排行
  3. 手写实现RPC框架基础功能
  4. 基于Java、Kafka、ElasticSearch的搜索框架的设计与实现
  5. 34988 Happy Reversal(二进制去取反)
  6. flutter 生成文档_Flutter文件操作
  7. python operator __gt___Python operator.gt方法代码示例
  8. 梅森旋转产生随机数c语言实现,C++生成随机数的实现代码
  9. 【JZOJ3824】【NOIP2014模拟9.9】渴
  10. 显示器驱动程序已停止响应 并且已成功恢复
  11. HDU4536+DFS
  12. 「Django」contenttypes基本用法
  13. 表格文字超数量就竖排_干货 |超实用Word、Excel、PPT软件技能
  14. 一段javscript 省市连动代码
  15. Redis 操作命令大全
  16. 蔡学镛:文档模板,天使或恶魔?
  17. Java微信如何自动添加好友,微信自动加好友 模拟位置
  18. 理解FFT, STFT, 加窗的含义
  19. 提交form表单时,修改action路径,增加参数
  20. 天龙八部雁门关外的故事

热门文章

  1. 1003 我要通过! (20point(s))
  2. js把文字中的空格替换为横线
  3. AR的平面检测和利用SceneKit构建几何体
  4. Fedora 24 Alpha带着Gnome 3.20姗姗来迟
  5. Unity3d多线程
  6. GdiPlus[6]: 五种画刷总览
  7. 【JQuery】可直接编辑的表格
  8. 两个ListBox中的项互相移动及上下移动
  9. python平稳性检验_时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python)...
  10. 面试官:你都工作3年了,连选择排序法都不会,我怎么能选择你