class Solution: def snakesAndLadders(self, board: List[List[int]]) -> int: ans = 0 n = len(board) n = n - 1 length = n + 1 que = [(1,0)] idx = 0 flag = [0 for i in range((n+1)*(n+1))] def add_node(que, idx, node): if len(que) <= idx: que.append(node) else: que[idx] = node def move(idx): row = 0 column = idx % (n + 1) if idx % (n + 1) == 0: row -= 1 row += idx // (n + 1) row = n - row oe = idx // (n + 1) % 2 if idx % (n + 1) == 0: oe = 1 - oe if column == 0: column = n + 1 column -= 1 if oe == 1: column = n - column return (row, column) front = 0 while idx - front >= 0: node = que[front] front += 1 step = node[1] cur_loc = node[0] if flag[cur_loc] == 1: continue flag[cur_loc] = 1 if cur_loc + 6 >= length * length: return step + 1 for i in range(1, 7): (row, column) = move(i + cur_loc) if board[row][column]!= -1: if board[row][column] == length * length: return step + 1 idx += 1 add_node(que, idx, (board[row][column], step + 1)) else: idx += 1 add_node(que, idx, (i + cur_loc, step + 1)) return -1