q[++tt] = {{0, 0}, 1}; grid[0][0] = 1; for (; tt >= hh;) { pair<pair<int, int>, int> node = q[hh++]; // determin if current node is end of grids int r = node.first.first, c = node.first.second, len = node.second; //cout << r << "-" << c << "-" << len << endl; if (r == R - 1 && c == C - 1) return len; for (int i = 0; i < 8; i++) { int ner = r + dr[i]; int nec = c + dc[i]; int nel = len + 1; // determin if in range if (ner >= 0 && ner < R && nec >= 0 && nec < C && !grid[ner][nec]) // valid node { //cout << ner << "-" << nec << "-" << nel << endl; q[++tt] = {{ner, nec}, nel}; grid[ner][nec] = 1; } } } return-1; } };