A70672 | 小H回家
来源编程题
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
小H在一个划分成了n*m个方格的长方形封锁线上。 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离开封锁线,否则就被打死了。 刚开始时他有满血6点,每移动一格他要消耗1点血量。一旦小H的 血量降到 0, 他将死去。 他可以沿路通过拾取金币来补满血量。只要他走到有金币的格子,他不需要任何时间即可拾取。格子上的金币可以瞬间补满,所以每次经过这个格子都有金币。就算到了某个有金币的格子才死去, 他也不能通过拾取金币补满血。 即使在家门口死去, 他也不能算完成任务回到家中。
地图上有 5 种格子:
数字 0: 障碍物。
数字 1: 空地, 小H可以自由行走。
数字 2: 小H出发点, 也是一片空地。
数字 3: 小H的家。
数字 4: 有金币在上面的空地。
小H能否安全回家?如果能, 最短需要多长时间呢?
输入格式
第一行两个整数n,m, 表示地图的大小为n*m。
下面 n 行, 每行 m 个数字来描述地图。
(1<=n,m<=9)
输出格式
一行, 若小H不能回家, 输出-1,否则输出他回家所需最短时间。
输入输出样例
输入 #1
3 3 2 1 1 1 1 0 1 1 3
输出 #1
4
思路
「小H回家」用深度优先搜索:沿一条路走到底再回溯,注意标记访问。
步骤
1. 读入图或网格。
2. 从起点 DFS,标记 vis,扩展相邻状态。
3. 在边界处更新答案或输出路径,回溯时恢复。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?