leetcode/909-240525-pass/main.py

47 lines
1.6 KiB
Python
Raw Normal View History

2024-05-25 16:21:47 +02:00
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