class Solution {
public int shortestPathBinaryMatrix(int[][] grid
) {
if (grid
[0][0] == 1) {
return -1;
}
int[][] direction
= {{1,1},{1,0},{1,-1},{0,1},{0,-1},{-1,1},{-1,0},{-1,-1}};
Queue
<int[]> queue
= new LinkedList<>();
int m
= grid
.length
, n
= grid
[0].length
;
int pathLength
= 0;
queue
.add(new int[]{0,0});
while (!queue
.isEmpty()) {
int size
= queue
.size();
pathLength
++;
while (size
-- > 0) {
int[] cur
= queue
.poll();
int cr
= cur
[0], cc
= cur
[1];
if (cr
== m
- 1 && cc
== n
- 1) {
return pathLength
;
}
for (int[] d
: direction
) {
int nr
= cr
+ d
[0], nc
= cc
+ d
[1];
if (nr
< 0 || nc
< 0 || nr
>= m
|| nc
>= n
|| grid
[nr
][nc
] == 1) {
continue;
}
grid
[nr
][nc
] = 1;
queue
.add(new int[]{nr
,nc
});
}
}
}
return -1;
}
}
转载请注明原文地址: https://mac.8miu.com/read-492634.html