type
status
date
slug
summary
tags
category
icon
password
创建时间
Mar 16, 2025 03:33 AM
你一开始位于棋盘上的方格
1
。每一回合,玩家需要从当前方格 curr
开始出发,按下述要求前进:- 选定目标方格
next
,目标方格的编号在范围[curr + 1, min(curr + 6, n2)]
。 - 该选择模拟了掷 六面体骰子 的情景,无论棋盘大小如何,玩家最多只能有 6 个目的地。
- 传送玩家:如果目标方格
next
处存在蛇或梯子,那么玩家会传送到蛇或梯子的目的地。否则,玩家传送到目标方格next
。
- 当玩家到达编号
n2
的方格时,游戏结束。
如果
board[r][c] != -1
,位于 r
行 c
列的棋盘格中可能存在 “蛇” 或 “梯子”。那个蛇或梯子的目的地将会是 board[r][c]
。编号为 1
和 n2
的方格不是任何蛇或梯子的起点。注意,玩家在每次掷骰的前进过程中最多只能爬过蛇或梯子一次:就算目的地是另一条蛇或梯子的起点,玩家也 不能 继续移动。
- 举个例子,假设棋盘是
[[-1,4],[-1,3]]
,第一次移动,玩家的目标方格是2
。那么这个玩家将会顺着梯子到达方格3
,但 不能 顺着方格3
上的梯子前往方格4
。(简单来说,类似飞行棋,玩家掷出骰子点数后移动对应格数,遇到单向的路径(即梯子或蛇)可以直接跳到路径的终点,但如果多个路径首尾相连,也不能连续跳多个路径)
返回达到编号为
n2
的方格所需的最少掷骰次数,如果不可能,则返回 -1
。BFS
思路:基本做法还是按照 BFS 求最短路径的做法。不同的是,在一般的 BFS 算法题中,是上下左右移动,而在本题中是往前移动,每次移动 1-6 步,遇到特殊的位置需要特殊处理。
思路有了,但是在细节处理上,还是不太好,就是 BFS 的终止条件那里,没有彻底搞清楚怎么编写。
我一开始是特判后,都放入队列中,没有理清楚终止条件。
参考 力扣官方题解