Advertisement
Guest User

Untitled

a guest
Jun 17th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.76 KB | None | 0 0
  1. public int shortestPathBinaryMatrix(int[][] grid) {
  2.     if(grid == null || grid.length == 0) return -1;
  3.  
  4.  
  5.  
  6.     Queue<Point> queue =new LinkedList<>();
  7.     int rowNum[] = {-1, 0, 0, 1, -1, -1, 1, 1};
  8.     int colNum[] = {0, -1, 1, 0, -1, 1, 1, -1};
  9.  
  10.  
  11.     int ROW = grid.length;
  12.     int COL = grid[0].length;
  13.  
  14.  
  15.  
  16.     if(grid[0][0] == 1 || grid[ROW -1][COL - 1] == 1) {
  17.       return -1;
  18.     }
  19.     int [][] distances = new int[ROW][COL];
  20.     distances[0][0] = 1;
  21.     boolean [][] visited = new boolean[ROW][COL];
  22.  
  23.     queue.offer(new Point(0, 0, 0));
  24.     visited[0][0] = true;
  25.  
  26.     while(!queue.isEmpty()) {
  27.       Point pt = queue.peek();
  28.       if(pt.x == ROW -1 && pt.y == COL -1) {
  29.         return pt.distance;
  30.       }
  31.  
  32.       queue.poll();
  33.  
  34.       for(int i = 0; i < 8; i++) {
  35.         int row = pt.x + rowNum[i];
  36.         int col = pt.y + colNum[i];
  37.  
  38.         if(isValid(row, col, ROW, COL) && grid[row][col] != 1 && !visited[row][col]) {
  39.           if(distances[row][col] < distances[pt.x][pt.y] + 1) {
  40.             visited[row][col] = true;
  41.             distances[row][col] = distances[pt.x][pt.y] + 1;
  42.             Point adjPoint = new Point(row, col, distances[row][col]);
  43.             queue.offer(adjPoint);
  44.           }
  45.  
  46.         }
  47.       }
  48.     }
  49.  
  50.     return visited[ROW-1][COL-1] ? distances[ROW-1][COL-1] : -1;
  51.     }
  52.    
  53.      private boolean isValid(int row, int col, int ROW, int COL) {
  54.     return ((row >= 0) && (row < ROW) && (col >= 0) && (col < COL));
  55.  
  56.   }
  57.    
  58.     private class Point {
  59.     int x;
  60.     int y;
  61.     int distance;
  62.  
  63.     public Point(int x, int y) {
  64.       this.x = x;
  65.       this.y = y;
  66.     }
  67.  
  68.     public Point(int x, int y, int distance) {
  69.       this.x = x;
  70.       this.y = y;
  71.       this.distance = distance;
  72.     }
  73.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement