Advertisement
lifeiteng

505. The Maze II

Nov 21st, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.36 KB | None | 0 0
  1. class Solution {
  2.     public int shortestDistance(int[][] maze, int[] start, int[] destination)
  3.     {
  4.         // Queue<int[]> q = new PriorityQueue<>((a, b)->(a[2] - b[2]));
  5.         Queue<int[]> q = new LinkedList<>();
  6.         q.offer(new int[]{start[0], start[1], 0});
  7.         int m = maze.length, n = maze[0].length;
  8.         int[][] visited = new int[m][n];
  9.         for(int[] v : visited) Arrays.fill(v, 10001);
  10.         int[] dx = {0, 1, 0, -1}, dy = {1, 0, -1, 0};
  11.         while(!q.isEmpty())
  12.         {
  13.             int[] p = q.poll();
  14.             int i = p[0], j = p[1], step = p[2];
  15.             // if(i == destination[0] && j == destination[1]) return step;
  16.             if(visited[i][j] <= step) continue;
  17.             visited[i][j] = step;
  18.             for(int k = 0; k < 4; k++)
  19.             {
  20.                 int ni = i, nj = j;
  21.                 while(ni >= 0 && ni < m && nj >= 0 && nj < n && maze[ni][nj] == 0)
  22.                 {
  23.                     ni += dx[k];
  24.                     nj += dy[k];
  25.                 }
  26.                 ni -= dx[k];
  27.                 nj -= dy[k];
  28.                 int nstep = step + Math.abs(ni - i) + Math.abs(nj - j);
  29.                 q.offer(new int[]{ni, nj, nstep});
  30.             }
  31.         }
  32.         // return -1;
  33.         return visited[destination[0]][destination[1]] == 10001 ? -1 : visited[destination[0]][destination[1]];
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement