void bfs(int[][] grid, int row, int col) {
int[][] dirs = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
ArrayDeque<int[]> queue = new ArrayDeque<>();
queue.add(new int[] {row, col});
mark(row, col);
while (!queue.isEmpty()) {
int[] cell = queue.remove();
visit(cell[0], cell[1]);
for (int[] dir : dirs) {
int nr = cell[0] + dir[0], nc = cell[1] + dir[1];
if (inside(grid, nr, nc) && unvisited(nr, nc)) {
mark(nr, nc);
queue.add(new int[] {nr, nc});
}
}
}
}
def bfs(grid, row: int, col: int) -> None:
queue = deque([(row, col)])
mark(row, col)
while queue:
r, c = queue.popleft()
visit(r, c)
for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):
nr, nc = r + dr, c + dc
if inside(grid, nr, nc) and unvisited(nr, nc):
mark(nr, nc)
queue.append((nr, nc))
def bfs(grid: Array[Array[Int]], row: Int, col: Int): Unit =
val dirs = Array((1, 0), (-1, 0), (0, 1), (0, -1))
val queue = scala.collection.mutable.Queue((row, col))
mark(row, col)
while queue.nonEmpty do
val (r, c) = queue.dequeue()
visit(r, c)
for (dr, dc) <- dirs do
val nr = r + dr
val nc = c + dc
if inside(grid, nr, nc) && unvisited(nr, nc) then
mark(nr, nc)
queue.enqueue((nr, nc))
void bfs(const std::vector<std::vector<int>>& grid, int row, int col) {
std::vector<std::pair<int, int>> dirs{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
std::queue<std::pair<int, int>> queue;
queue.push({row, col});
mark(row, col);
while (!queue.empty()) {
auto [r, c] = queue.front();
queue.pop();
visit(r, c);
for (auto [dr, dc] : dirs) {
int nr = r + dr, nc = c + dc;
if (inside(grid, nr, nc) && unvisited(nr, nc)) {
mark(nr, nc);
queue.push({nr, nc});
}
}
}
}