要求:从(0,0)走到(n-1,n-1)只能经过0,最短距离
思路:bfs,每层都要用while遍历,visited可以不必要,访问过的改成1即可
class Solution {
public:
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
queue<pair<int,int>> q;
map<pair<int,int>,int> visited;
if(grid[0][0]==0)q.push(make_pair(0,0));
int n=grid.size();
int len=0;
while(!q.empty()){
int thislevelsize=q.size();
++len;
while(thislevelsize--){
pair<int,int> tmp=q.front();
q.pop();
int x=tmp.first,y=tmp.second;
if(x==n-1&&y==n-1)return len;
for(int i=x-1;i<=x+1;++i){
for(int j=y-1;j<=y+1;++j){
if(i==x&&j==y)continue;
if(i<0||i>=n||j<0||j>=n)continue;
pair<int,int> ttmp(i,j);
if(grid[i][j]==0&&visited.count(ttmp)==0){
visited[ttmp]=1;
q.push(ttmp);
}
}
}
}
}
return -1;
}
};