Advertisement
t_naveen_2308

Maze Solver using Python

Feb 11th, 2024
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.00 KB | None | 0 0
  1. from collections import deque
  2. import sys
  3.  
  4. class Solution:
  5.    
  6.     def bfs(self, s, e):
  7.         n = len(self.grid)
  8.         m = len(self.grid[0])
  9.         queue = deque()
  10.         N = 10**3
  11.         visited = [[False]*N for _ in range(N)]
  12.         moves = [(1, 0), (0, 1), (-1, 0), (0, -1)]
  13.         dist = [[0]*N for _ in range(N)]
  14.         visited[s[0]][s[1]] = 1;
  15.         queue.append(s)
  16.         d = 0
  17.         is_valid = lambda n, m, nxt: ((0<=nxt[0])and(nxt[0]<n))and((0<=nxt[1])and(nxt[1]<m))
  18.         while queue:
  19.             node = queue.popleft()
  20.             for move in moves:
  21.                 nxt = (move[0]+node[0], move[1]+node[1])
  22.                 if is_valid(n, m, nxt):
  23.                     if not visited[nxt[0]][nxt[1]] and self.grid[nxt[0]][nxt[1]]!='X':
  24.                         if nxt[0]==e[0] and nxt[1]==e[1]:
  25.                             return 1+dist[node[0]][node[1]]
  26.                         else:
  27.                             visited[nxt[0]][nxt[1]] = True
  28.                             dist[nxt[0]][nxt[1]] = 1+dist[node[0]][node[1]]
  29.                             queue.append(nxt)
  30.         return -1
  31.  
  32.     def main(self):
  33.         self.grid = []
  34.         row = input()
  35.         while row:
  36.             self.grid.append(list(row))
  37.             row = input()
  38.         n = len(self.grid)
  39.         m = len(self.grid[0])
  40.         for i in range(n):
  41.             if self.grid[i][0] == ' ':
  42.                 s = (i, 0)
  43.             if self.grid[i][m-1] == ' ':
  44.                 e = (i, m-1)
  45.         for i in range(n):
  46.             for j in range(m):
  47.                 if self.grid[i][j] == '*':
  48.                     k = (i, j)
  49.                     break
  50.         toKey = self.bfs(s, k)
  51.         if toKey == -1:
  52.             print(-1)
  53.             return
  54.         toExit = self.bfs(k, e)
  55.         if toExit==-1:
  56.             print(-2)
  57.             return
  58.         print(toKey+toExit)
  59.  
  60. if __name__ == "__main__":
  61.     input = lambda : sys.stdin.buffer.readline().decode().strip('\n')
  62.     sol = Solution()
  63.     sol.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement