Advertisement
darekfive

Untitled

Mar 15th, 2025
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.91 KB | None | 0 0
  1. class Solution {
  2.     int[][] dirs = {{-1,-1}, {-1,0}, {-1,1}, {0,-1}, {0,1}, {1, -1}, {1, 0} , {1,1}};
  3.     public int shortestPathBinaryMatrix(int[][] grid) {
  4.         //bfs
  5.         int m = grid.length;
  6.         if (m == 1) return grid[0][0] == 0 ? 1 : -1; //1x1 edge case
  7.         if (grid[0][0] == 1) return -1; //invalid start
  8.         Queue<int[]> q = new ArrayDeque<>();
  9.         grid[0][0] = 1; //mark visited
  10.         q.offer(new int[] {0,0});
  11.         HashMap<Integer,Integer> parent = new HashMap<>();
  12.         int level = 1;
  13.         while (!q.isEmpty()) {
  14.             int size = q.size();
  15.             for (int i =0; i < size ;i++) {
  16.                 int[] cur = q.poll();
  17.                 for (int[] d : dirs) {
  18.                     int x = d[0] + cur[0];
  19.                     int y = d[1] + cur[1];
  20.                     if (x >= 0 && x < m && y >= 0 && y < m && grid[x][y] == 0) {
  21.                         parent.put(x*1000+y, cur[0] *1000 + cur[1]);
  22.                         if (x == m-1 && y == m-1) {
  23.                             outputPath(x*1000+y, parent);
  24.                             return level + 1;
  25.                         }
  26.                         grid[x][y] = 1;//mark visited
  27.                         q.offer(new int[] {x,y});
  28.                     }
  29.                 }
  30.             }
  31.             level++;
  32.         }
  33.         return -1;
  34.     }
  35.     void outputPath(int key, HashMap<Integer,Integer> map) {
  36.         StringBuilder sb = new StringBuilder();
  37.         List<String> path = new ArrayList<>();
  38.         while (map.containsKey(key)) {
  39.             sb.append("[")
  40.             .append(key/1000)
  41.             .append(",")
  42.             .append(key%1000)
  43.             .append("]");
  44.             path.add(sb.toString());
  45.             sb.setLength(0);
  46.             key = map.get(key);
  47.         }
  48.         path.add("[0,0]");
  49.         Collections.reverse(path);
  50.         System.out.println(String.join("->", path));
  51.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement