当前位置: 首页 > news >正文

P2802 回家

P2802 回家 - 洛谷

题目描述

小 H 在一个划分成了 n×m 个方格的长方形封锁线上。每次他能向上下左右四个方向移动一格(当然小 H 不可以静止不动),但不能离开封锁线,否则就被打死了。刚开始时他有满血 6 点,每移动一格他要消耗 1 点血量。一旦小 H 的血量降到 0,他将死去。他可以沿路通过拾取鼠标(什么鬼。。。)来补满血量。只要他走到有鼠标的格子,他不需要任何时间即可拾取。格子上的鼠标可以瞬间补满,所以每次经过这个格子都有鼠标。就算到了某个有鼠标的格子才死去,他也不能通过拾取鼠标补满 HP。即使在家门口死去,他也不能算完成任务回到家中。

地图上有五种格子:

  • 0 :障碍物。
  • 1 :空地,小 H 可以自由行走。
  • 2 :小 H 出发点,也是一片空地。
  • 3 :小 H 的家。
  • 4 :有鼠标在上面的空地。

小 H 能否安全回家?如果能,最短需要多长时间呢?

输入格式

第一行两个整数 n,m,表示地图的大小为 n×m。
下面 n 行,每行 m 个数字来描述地图。

输出格式

一行,若小 H 不能回家,输出 -1,否则输出他回家所需最短时间。

输入输出样例

输入 #1输出 #1
3 3
2 1 1
1 1 0
1 1 3
4

说明/提示

对于所有数据,1≤n,m≤9。

2021.9.2 增添一组 hack 数据 by @囧仙

思路:
多开一维度储存到达位置的唯一血量路径

代码:

#include<bits/stdc++.h>
using namespace std;int dx[] = {0,1,0,-1};
int dy[] = {1,0,-1,0};
int n,m,startx,starty,endx,endy;
int G[15][15];
bool vis[15][15][7]; // 三维标记数组,记录在(x,y)位置且血量为hp时是否已经访问过struct Node{int x,y,t,hp; // x,y是坐标,t是时间,hp是当前血量
};int bfs() 
{queue<Node> q;memset(vis, false, sizeof(vis));q.push({startx, starty, 0, 6});vis[startx][starty][6] = true;while(!q.empty()) {Node cur = q.front();q.pop();int x = cur.x;int y = cur.y;int t = cur.t;int hp = cur.hp;if(hp <= 0) continue;if(x == endx && y == endy) {return t;}for(int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if(nx < 1 || nx > n || ny < 1 || ny > m || G[nx][ny] == 0) continue;int newHp = hp - 1;if(newHp <= 0)continue; if(G[nx][ny] == 4) newHp = 6;if(!vis[nx][ny][newHp]) {vis[nx][ny][newHp] = true;q.push({nx, ny, t + 1, newHp});}}}return -1; 
}int main() 
{cin >> n >> m;for(int i = 1; i <= n; i++) {for(int j = 1; j <= m; j++){cin >> G[i][j];if(G[i][j] == 2) {startx = i;starty = j;}if(G[i][j] == 3) {endx = i;endy = j;}}}int ans = bfs();cout << ans << endl;return 0;
}

http://www.lryc.cn/news/587921.html

相关文章:

  • 国家互联网信息办公室关于发布第十二批深度合成服务算法备案信息的公告
  • 力扣算法--数青蛙与外观数列问题
  • 3.2 WPF 画散点图
  • 【Python3教程】Python3高级篇之MySQL - mysql-connector 驱动介绍及示例
  • 【WPF】WPF 自定义控件 实战详解,含命令实现
  • 深地之下的智慧触角:Deepoc具身智能如何为矿业机器人铸就“感知之核”
  • Mac (m1) Java 加载本地C共享库函数 .dylib 函数 Unable to load library ‘liblicense‘
  • 【爬虫】Python实现爬取京东商品信息(超详细)
  • 来时路,零帧起手到Oracle大师
  • FilterRegistationBean报错does not have type parameters。idea启动日志无明显报错提示冲突 kaki的博客
  • IDEA实现纯java项目并打包jar(不使用Maven,Spring)
  • Linux的相关学习
  • Oracle物化视图函数使用注意事项
  • Oracle 递归函数及 其他数据库 CTE 使用小计
  • SpringBoot集成SAP,本地IDEA启动和Windows服务器部署
  • 企业培训笔记:axios 发送 ajax 请求
  • iOS高级开发工程师面试——RunLoop
  • [Nagios Core] struct监控对象 | 配置.cfg加载为内存模型
  • CSS `:root` 伪类深入讲解
  • Reactor 模式详解
  • spring shell 基础使用
  • Transformer江湖录 第五章:江湖争锋 - BERT vs GPT
  • 20250714让荣品RD-RK3588开发板在Android13下长按关机
  • Bash常见条件语句和循环语句
  • vLLM与SGLang在自然语言处理领域的技术架构与性能对比研究
  • 从数据库到播放器:Java视频续播功能完整实现解析
  • cuda优化之softmax
  • 调用 System.runFinalizersOnExit() 的风险与解决方法
  • JavaScript 与 C语言基础知识差别
  • Spark 单机模式安装与测试全攻略​