相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
class Solution {
public int shortestPathBinaryMatrix(int[][] grid) {
int[] dx = {-1,-1,-1,0,1,1,1,0};//八个方向的x
int[] dy = {-1,0,1,1,1,0,-1,-1};//八个方向的y
int n = grid.length;
if (grid[0][0]==1||grid[n-1][n-1]==1){
return -1;
}
LinkedList<int[]> queue = new LinkedList<>();//创建队列
queue.add(new int[]{0,0});
int count = 1;
while (!queue.isEmpty()){
int size = queue.size();//获取队列的元素个数
for (int i = 0; i < size; i++) {
int[] point = queue.poll();
int row = point[0];//行坐标
int col = point[1];//列坐标
if (row ==n-1&&col==n-1){
return count;
}
//取当前点的八个方向的坐标点判断是否存在为0的坐标点, 存在则进入下一轮bfs处理
for (int j = 0; j < dx.length; j++) {
int x = row + dx[j];
int y = col + dy[j];
if (x>=0&&y>=0 && x<n&&y<n && grid[x][y]==0){
grid[x][y]=1;//赋值为1,以防重复访问
queue.add(new int[]{x,y});//加入队列
}
}
}
count++;//遍历完一层,最短路径+1
}
return -1;//到这里说明没有最短路经
}
}