具体思路:
多方向搜索最短路径可以用bfs,这样免去了重复判断的过程;
而且不需要大量剪枝;
bfs到达某点的距离必定是最短距离,毫无例外,不用dfs标记去最小;
具体代码:
class Solution {
public:
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
int n=grid.size();
int step=0;
queue<pair<int, int>>q;
if(grid[0][0]==1)
return -1;
q.push({0,0});
grid[0][0]=1;
while(!q.empty()){
step++;
int size=q.size();
while(size>0){
size--;
pair<int, int>p=q.front();
int x=p.first;
int y=p.second;
q.pop();
if(x==n-1&&y==n-1)
return step;
for(int i=0;i<dir.size();i++){
int nx=x+dir[i][0];
int ny=y+dir[i][1];
if(nx>=0&&nx<n&&ny>=0&&ny<n&&grid[nx][ny]==0){
q.push({nx,ny});
grid[nx][ny]=1;
}
}
}
}
return -1;
}
private:
vector<vector<int>> dir={{0,1},{1,1},{1,0},{-1,-1},{0,-1},{-1,0},{-1,1},{1,-1}};
};