3
int shortestPathBinaryMatrix(vector<vector<int>> &grid) {4
int m = grid.size(), n = grid[0].size();5
if (grid[0][0] != 0 || grid[m - 1][n - 1] != 0) return -1;6
vector<vector<int>> dist(m, vector<int>(n, INT_MAX));8
queue<pair<int, int>> q;12
int dir[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}};14
auto curr = q.front();16
for (int i = 0; i < 8; i++) {17
int newi = curr.first + dir[i][0];18
int newj = curr.second + dir[i][1];19
if (newi >= 0 && newi < m && newj >= 0 && newj < n && grid[newi][newj] == 0) {20
if (dist[newi][newj] > dist[curr.first][curr.second] + 1) {21
dist[newi][newj] = dist[curr.first][curr.second] + 1;28
return dist[m - 1][n - 1] == INT_MAX ? -1 : dist[m - 1][n - 1];