Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import deque
- n, m = map(int, input().split())
- temp = n
- matrix = []
- while temp:
- matrix.append(list(input().split()))
- temp -= 1
- nxt = [[[] for _ in range(m)] for _ in range(n)]
- for i in range(n):
- prev = (-1, -1)
- for j in range(m-1, -1, -1):
- if matrix[i][j] == '2':
- prev = (i, j)
- elif matrix[i][j] == '1':
- prev = (-1, -1)
- elif prev == (-1, -1):
- prev = (i, j)
- nxt[i][j].append(prev)
- else:
- nxt[i][j].append(prev)
- for j in range(m):
- prev = (-1, -1)
- for i in range(n-1, -1, -1):
- if matrix[i][j] == '2':
- prev = (i, j)
- elif matrix[i][j] == '1':
- prev = (-1, -1)
- elif prev == (-1, -1):
- prev = (i, j)
- nxt[i][j].append(prev)
- else:
- nxt[i][j].append(prev)
- for i in range(n):
- prev = (-1, -1)
- for j in range(m):
- if matrix[i][j] == '2':
- prev = (i, j)
- elif matrix[i][j] == '1':
- prev = (-1, -1)
- elif prev == (-1, -1):
- prev = (i, j)
- nxt[i][j].append(prev)
- else:
- nxt[i][j].append(prev)
- for j in range(m):
- prev = (-1, -1)
- for i in range(n):
- if matrix[i][j] == '2':
- prev = (i, j)
- elif matrix[i][j] == '1':
- prev = (-1, -1)
- elif prev == (-1, -1):
- prev = (i, j)
- nxt[i][j].append(prev)
- else:
- nxt[i][j].append(prev)
- q = deque([(0, 0, 0)])
- visited = set([(0, 0)])
- while q:
- x, y, steps = q.popleft()
- if matrix[x][y] == '2':
- break
- for xp, yp in nxt[x][y]:
- if (x, y) != (xp, yp) and (xp, yp) not in visited:
- q.append((xp, yp, steps+1))
- visited.add((xp, yp))
- print(steps)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement