leetcode_909 Snakes and Ladders
You are given an n x n integer matrix board where the cells are labeled from 1 to n2 in a Boustrophedon style starting from the bottom left of the board (i.e. board[n - 1][0]) and alternating direction each row.
You start on square 1 of the board. In each move, starting from square curr, do the following:
Choose a destination square next with a label in the range [curr + 1, min(curr + 6, n2)].
This choice simulates the result of a standard 6-sided die roll: i.e., there are always at most 6 destinations, regardless of the size of the board.
If next has a snake or ladder, you must move to the destination of that snake or ladder. Otherwise, you move to next.
The game ends when you reach the square n2.
A board square on row r and column c has a snake or ladder if board[r][c] != -1. The destination of that snake or ladder is board[r][c]. Squares 1 and n2 are not the starting points of any snake or ladder.
Note that you only take a snake or ladder at most once per dice roll. If the destination to a snake or ladder is the start of another snake or ladder, you do not follow the subsequent snake or ladder.
For example, suppose the board is [[-1,4],[-1,3]], and on the first move, your destination square is 2. You follow the ladder to square 3, but do not follow the subsequent ladder to 4.
Return the least number of dice rolls required to reach the square n2. If it is not possible to reach the square, return -1.

思路
题目中给定的棋盘(board),是按照左右交互(Boustrophedon)的方式来排列的.并且需要注意,棋盘位置中的值是从1开始的,但是我们代码中的数组下标是从0开始的,那么我们就需要注意,遇到梯子(ladder)或者蛇(snake)的时候,跳跃到指定格子时,根据格子的值来寻找坐标时,需要将当前的值进行减一的操作后,再去寻找坐标。
然后因为是需要找到到达(n * n)的最短方式,又由于在此题中,每次移动均会产生相同的一个步骤(step)的消耗,所以可以使用bfs(Breadth First Search)来遍历。此方法的优点是只要找到了(n * n)的点,那么即可停止遍历。如果使用dfs,那么需要收集所有点的信息,会比较麻烦一些
代码
1 | class Solution { |