神奇,居然只能用宽搜
如果是深搜索的话,可能会错过最短路径。(最短路径用宽搜一定要记得)
struct Node{
int x;
int y;
int length;
Node(int x, int y, int length) :x(x), y(y), length(length){}
};
class Solution {
public:
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
int n = grid.size();
if(grid[0][0]) return -1;
queue<Node> st;
st.push(Node(0, 0, 1));
grid[0][0] = 1;
vector<int> x_shift = {-1, -1, 0, -1, 1, 0, 1, 1};
vector<int> y_shift = {-1, 0, -1, 1, -1, 1, 0, 1};
while(!st.empty()){
Node t = st.front(); st.pop();
if(t.x == n - 1 && t.y == n - 1)
return t.length;
for(int i=0; i<8; i++){
int nx = t.x + x_shift[i];
int ny = t.y + y_shift[i];
if(nx >= 0 && ny >= 0 && nx < n && ny < n){
if(grid[nx][ny] == 0){
st.push(Node(nx, ny, t.length + 1));
grid[nx][ny] = 1;
}
}
}
}
return -1;
}
};