forked from SamirPaulb/DSAlgo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
05. Snakes and Ladders.py
34 lines (30 loc) Β· 1.02 KB
/
05. Snakes and Ladders.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# https://leetcode.com/problems/snakes-and-ladders/
class Solution:
def snakesAndLadders(self, board: List[List[int]]) -> int:
n = len(board)
def label_to_position(label):
# r = (lebel - 1) // n
# c = (lebel - 1) % n
r, c = divmod(label-1, n)
if r % 2 == 0:
return n-1-r, c
else:
return n-1-r, n-1-c
seen = set()
queue = collections.deque()
queue.append((1, 0))
while queue:
label, step = queue.popleft()
r, c = label_to_position(label)
if board[r][c] != -1:
label = board[r][c]
if label == n*n:
return step
for x in range(1, 7):
new_label = label + x
if new_label <= n*n and new_label not in seen:
seen.add(new_label)
queue.append((new_label, step+1))
return -1
# Time: O(n^2)
# Space: O(n^2)