Advertisement
serega1112

labirynth

Mar 26th, 2021
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.89 KB | None | 0 0
  1. from collections import deque
  2.  
  3. n, m = map(int, input().split())
  4. temp = n
  5. matrix = []
  6. while temp:
  7.     matrix.append(list(input().split()))
  8.     temp -= 1
  9.  
  10. nxt = [[[] for _ in range(m)] for _ in range(n)]
  11.  
  12. for i in range(n):
  13.     prev = (-1, -1)
  14.     for j in range(m-1, -1, -1):
  15.         if matrix[i][j] == '2':
  16.             prev = (i, j)
  17.         elif matrix[i][j] == '1':
  18.             prev = (-1, -1)
  19.         elif prev == (-1, -1):
  20.             prev = (i, j)
  21.             nxt[i][j].append(prev)
  22.         else:
  23.             nxt[i][j].append(prev)
  24.  
  25. for j in range(m):
  26.     prev = (-1, -1)
  27.     for i in range(n-1, -1, -1):
  28.         if matrix[i][j] == '2':
  29.             prev = (i, j)
  30.         elif matrix[i][j] == '1':
  31.             prev = (-1, -1)
  32.         elif prev == (-1, -1):
  33.             prev = (i, j)
  34.             nxt[i][j].append(prev)
  35.         else:
  36.             nxt[i][j].append(prev)
  37.            
  38. for i in range(n):
  39.     prev = (-1, -1)
  40.     for j in range(m):
  41.         if matrix[i][j] == '2':
  42.             prev = (i, j)
  43.         elif matrix[i][j] == '1':
  44.             prev = (-1, -1)
  45.         elif prev == (-1, -1):
  46.             prev = (i, j)
  47.             nxt[i][j].append(prev)
  48.         else:
  49.             nxt[i][j].append(prev)
  50.  
  51. for j in range(m):
  52.     prev = (-1, -1)
  53.     for i in range(n):
  54.         if matrix[i][j] == '2':
  55.             prev = (i, j)
  56.         elif matrix[i][j] == '1':
  57.             prev = (-1, -1)
  58.         elif prev == (-1, -1):
  59.             prev = (i, j)
  60.             nxt[i][j].append(prev)
  61.         else:
  62.             nxt[i][j].append(prev)
  63.            
  64. q = deque([(0, 0, 0)])
  65. visited = set([(0, 0)])
  66. while q:
  67.     x, y, steps = q.popleft()
  68.     if matrix[x][y] == '2':
  69.         break
  70.     for xp, yp in nxt[x][y]:
  71.         if (x, y) != (xp, yp) and (xp, yp) not in visited:
  72.             q.append((xp, yp, steps+1))
  73.             visited.add((xp, yp))
  74.            
  75. print(steps)
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement