题目:
N x N 的棋盘 board 上,按从 1 到 N*N 的数字给方格编号,编号 从左下角开始,每一行交替方向。
例如,一块 6 x 6 大小的棋盘,编号如下:
解答:
class Solution:
def snakesAndLadders(self, board: List[List[int]]) -> int:
n = len(board)
#将编号转换为对应的行列:
def id2rc(id):
r,c=(id-1)//n,(id-1)%n
if r%2==1:
c=n-1-c
return n-1-r,c
#BFS遍历搜索
visited={1}
q=deque([(1,0)])
while q:
cur,step=q.popleft()
for i in range(1,7):
cn=cur+i
if cn>n*n:
break
r,c=id2rc(cn)
if board[r][c]!=-1:
cn=board[r][c]
if cn==n*n:
return step+1
if cn not in visited:
q.append((cn,step+1))
visited.add(cn)
return -1