Shortest Path in Binary Matrix
Last updated
Last updated
public class Solution {
public int ShortestPathBinaryMatrix(int[][] grid) {
int m = grid.Length;
int n = grid[0].Length;
if(grid[0][0] == 1 || grid[m-1][n-1] == 1){
return -1;
}
bool[][] isVisited = new bool[m][];
for(int i = 0; i < m ; i++){
isVisited[i] = new bool[n];
}
Queue<int[]> q = new Queue<int[]>();
q.Enqueue(new int[]{0, 0});
isVisited[0][0] = true;
int[][] dirs = new int[8][];
dirs[0] = new int[]{-1, 0};
dirs[1] = new int[]{1, 0};
dirs[2] = new int[]{0, -1};
dirs[3] = new int[]{0, 1};
dirs[4] = new int[]{-1,-1};
dirs[5] = new int[]{1,-1};
dirs[6] = new int[]{-1, 1};
dirs[7] = new int[]{1,1};
int ans = 0;
while(q.Count > 0){
int size = q.Count;
for(int l=0 ;l <size;l++) {
var curr = q.Dequeue();
if(curr[0] == m - 1 && curr[1] == n -1){
return ans + 1;
}
for(int i = 0; i < 8; i++){
int x = curr[0] + dirs[i][0];
int y = curr[1] + dirs[i][1];
if(x < 0 || x >= m || y < 0 || y >= m || isVisited[x][y] || grid[x][y] == 1){
continue;
}
q.Enqueue(new int[]{x, y});
isVisited[x][y] = true;
}
}
ans ++;
}
return -1;
}
}