题目

题目链接

题解

BFS。


整体思路:将位置信息和时刻信息放入队列,根据时刻信息判断当前时刻小明的大小,如果大小为1×11×11×1则不能原地停留,因为没意义啊,停留是为了让自己的肚子减小,但是1×11×11×1时肚子已经最小了,所以只有当大小不是1×11×11×1时才会进行停留操作,对应到代码上就是位置信息不变,时刻信息+1入队;其他部分就是和基础BFS差不多了,遍历四个方向,如果挺着当前的肚子会遇到障碍,则continue;如果之前走到过该位置,则continue;如果肚子发生越界,则continue。到达终点结束。


真没想到对于原地停留如此处理!而且标记数组居然只用标记位置信息!

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1010;int n, k;
string a[N];
int dir[2][4] = {-1, 1, 0, 0, 0, 0, -1, 1};
int st[N * N];  struct node {int first; // 位置(一维) int second; // 到达该位置的时间 // 不记录小明每个位置的大小,大小可由时间来判断
};int bfs () {queue <node> q;q.push ({2 * n + 2, 0});st[2*n+2] = 1; // 标记起点 while (q.size()) {node t = q.front ();q.pop ();int x = t.first / n;int y = t.first % n;int tm = t.second;// 如果当前小明大小不是1 ×1,那么小明可以选择原地踏步 int v = 2; // 大小记录为多出的宽度,即5 ×5 = (2*v+1) * (2*v+1),其中v=2,类似的 3 ×3 = (2*1+1) * (2*1+1)if (tm >= 2*k) v = 0;else if (tm >= k) v = 1;if (v) q.push ({t.first, tm + 1}); // 位置不变,时间增加 // 放在遍历四个方向的for循环外面 for (int i = 0;i < 4;i ++) {int tx = x + dir[0][i], ty = y + dir[1][i], flag = 0;int tnext = tx * n + ty;// 越界 (加上肚子) if (tx - v < 0 || ty - v < 0 || tx + v >= n || ty + v >= n) continue;// 状态是否遇到过 if (st[tnext]) continue;// 遇到障碍物 (加上肚子) for (int j = -v;j <= v;j ++)for (int k = -v;k <= v;k ++)if (a[tx+j][ty+k] == '*') {flag = 1;break;}if (flag) continue;if (tx == n-3 && ty == n-3) return tm+1; // 遇到就跳出,而不是在外面判断是为了减少次数 st[tnext] = 1;q.push ({tnext, tm + 1}); }}return -1;
}int main()
{cin >> n >> k;for (int i = 0;i < n;i ++)cin >> a[i];cout << bfs ();  return 0;
}

蓝桥杯2019年第十届国赛真题-大胖子走迷宫相关推荐

  1. [蓝桥杯]2019年第十届省赛真题C/C++ B组 填空+大题

    第十届蓝桥杯省赛题目 填空A:组队 填空B:年号字串 填空C:数列求值 填空 D: 数的分解 填空 E: 迷宫 大题F:特别数的和 大题G:完全二叉树的权值 大题H:等差数列 大题I-后缀表达式 填空 ...

  2. 题目 2311: 蓝桥杯2019年第十届省赛真题-Fibonacci 数列与黄金分割

    题目 Fibonacci 数列是非常著名的数列: F[1] = 1,F[2] = 1, 对于 i > 3,F[i] = F[i − 1] + F[i − 2] Fibonacci 数列有一个特殊 ...

  3. 题目 2307: 蓝桥杯2019年第十届省赛真题-灵能传输

    题目 在游戏<星际争霸 II>中,高阶圣堂武士作为星灵的重要 AOE 单位,在 游戏的中后期发挥着重要的作用,其技能"灵能风暴"可以消耗大量的灵能对 一片区域内的敌军造 ...

  4. 蓝桥杯嵌入式STM32G431——第七届省赛真题模拟液位检测告警系统

    第七届省赛真题模拟液位检测告警系统 第七届省赛真题 主函数部分的代码功能实现(不包含各模块初始化代码) 第七届省赛真题 主函数部分的代码功能实现(不包含各模块初始化代码) #include " ...

  5. 【蓝桥杯】 《3W字数总结》 蓝桥杯Java必备基础知识以及国赛真题解析

    本文会持续更新,如果对您有帮助的话可以点点关注,双击 本人2021年蓝桥杯C++B组国二,今年转战Java,并整理此文,希望能够对大家有所帮助,第一次写这么长的文章,可能有的地方写的不是很好,还请大家 ...

  6. 蓝桥杯2022年第十三届省赛真题-纸张尺寸

    题目描述 在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm × 841mm,将 A0 纸沿长边对折后为 A1 纸,大小为 841mm × 594mm,在对折的过程中长度直接取下整(实际裁 ...

  7. 蓝桥杯题目 2682: 蓝桥杯2022年第十三届省赛真题-GCD

    题目描述 给定两个不同的正整数 a, b,求一个正整数 k 使得 gcd(a + k, b + k) 尽可能大,其中 gcd(a, b) 表示 a 和 b 的最大公约数,如果存在多个 k,请输出所有满 ...

  8. 消除游戏——蓝桥杯2022年第十三届省赛真题

    题目描述 在一个字符串 S 中,如果 S i = S i−1 且S i 不等于S i−1,则称 S i 和 S i+1 为边缘字符.如果S i 不等于S i−1且 S i = S i+1,则 S i− ...

  9. 每日一题——质因数个数(蓝桥杯2022年第十三届省赛真题)

    如何将一个正整数分解质因数:每日一题--将一个正整数分解质因数_笨小古的博客-CSDN博客 题目描述:给定正整数 n,请问有多少个质数是 n 的约数. 输入格式:输入的第一行包含一个整数 n. 输出格 ...

最新文章

  1. 排插老化再酿祸端,安全新国标排插首选品胜
  2. bootstrap 导航学习
  3. 【Tools】VMware虚拟机三种网络模式详解和操作
  4. .NET生态现状:超一半 .NET开发者使用C# 8、.NET Framework使用量减少
  5. 现在电脑的主流配置_主流级玩家 应该如何配置高性价比电脑
  6. torch 默认参数初始化_Detection学习之九-torch中如何定义优化器及调整学习率
  7. VirtualBox虚拟机,WIN7的性能远远落后于LINUX及解决办法
  8. java实训任务_java实训任务
  9. App自动绑定的五大应用场景
  10. ANC降噪蓝牙耳机软件工程的数学原理
  11. IPVS使用的Netfilter Hook点
  12. 核心路由器市场分析:07回顾以及08展望
  13. 高精度整数算法总结,尤其是乘法,面向小白版
  14. 操作系统基础:进程逻辑思维导图,超简单理解进程管理
  15. D - Petya and Array(树状数组,二分)
  16. mysql语句总结_mysql语句总结
  17. NSString NSArray NSDictionary NSSet 中的部分方法
  18. SpringCloud-06-Hystrix断路器
  19. Microelectronic学习章节总结(1)-- 计算机架构复习
  20. 关于position:fixed;的居中问题

热门文章

  1. Mosquitto not authorised
  2. AAAI2021论文: 时空Kriging的归纳式图神经网络
  3. AppCrash explorer问题(解决方法)
  4. BPMN 2.0规范
  5. 利用composer安装依赖
  6. 无线遥控开关 开关和遥控器配对学习
  7. [密码学篇]古典密码详述
  8. 【机器学习】Python详细实现基于欧式Euclidean、切比雪夫Chebyshew、曼哈顿Manhattan距离的Kmeans聚类
  9. 计算机类软件工程与测绘类遥感专业的薪水,2018遥感科学与技术专业就业前景和就业方向分析...
  10. windowsserver2016安装