あまり広まっておらず知る人ぞ知るテクみたいになってる気がしたので。 グリッド上でBFSをするときに、単純に書くとこのような感じになると思います。 bool bfs(const vector<vector<int>>& grid, int r, int c) { vector<pair<int, int>> queue = { {r, c} }; vector<vector<bool>> visited(H, vector<bool>(W)); visited[r][c] = true; int qi = 0; while (qi < queue.size()) { auto [cr, cc] = queue[qi]; for (int i = 0; i < 4; ++i) { int nr = cr + DR[i]; int nc = cc + DC[i]; if (nr < 0 || H