思路:利用bfs,维护距离矩阵d,找到最短路径
class Solution {
private:const int inf=1e8;
typedef pair<int,int> P;
int d[100][100];
public:
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
if(grid[0][0]==1) return -1;//无起点,特判
int n=grid.size();
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
d[i][j]=inf;
queue<P>q; q.push(P(0,0)); d[0][0]=1;
while(!q.empty()){
P p=q.front(); q.pop();
if(p.first==n-1&&p.second==n-1) break;
for(int dx=-1;dx<=1;dx++)
for(int dy=-1;dy<=1;dy++){
int nx=p.first+dx,ny=p.second+dy;
if(0<=nx&&nx<n&&0<=ny&&ny<n&&grid[nx][ny]==0&&d[nx][ny]==inf){
q.push(P(nx,ny));
d[nx][ny]=d[p.first][p.second]+1;
}
}
}
if(d[n-1][n-1]==inf) return -1;
else return d[n-1][n-1];
}
};