Untitled
unknown
java
3 years ago
1.4 kB
3
Indexable
class Solution { public int shortestPathBinaryMatrix(int[][] grid) { if(grid == null || grid.length == 0) return -1; if(grid[0][0] == 1) return -1; return traverse(grid); } public int traverse(int[][] grid){ Queue<int[]> q = new LinkedList<>(); // Set<String> visited = new HashSet<>(); boolean[][] visited = new boolean[grid.length][grid[0].length]; q.add(new int[]{0, 0}); int[] x = new int[]{-1, -1, -1, 0, 0, 1, 1, 1}; int[] y = new int[]{-1, 0, 1, -1, 1, -1, 0, 1}; int dist = 0; while(!q.isEmpty()){ int size = q.size(); dist++; for(int i = 0; i < size; i++){ int[] coord = q.poll(); if(coord[0] == grid.length -1 && coord[1] == grid[0].length - 1) return dist; // visited.add(Integer.toString(coord[0]) + "+" + Integer.toString(coord[1])); visited[coord[0]][coord[1]] = true; for(int idx = 0; idx < x.length; idx++){ int newX = coord[0] + x[idx]; int newY = coord[1] + y[idx]; if(newX < 0 || newX >= grid.length || newY < 0 || newY >= grid[0].length || grid[newX][newY] != 0 || visited[newX][newY]) continue; q.add(new int[]{newX, newY}); } } } return -1; } }
Editor is loading...