using
System;
using
System.Collections.Generic;
class
Program
{
static
bool
Check(
int
row,
int
col,
int
r,
int
c)
{
return
(r >= 0 && r < row && c >= 0 && c < col);
}
static
void
BFS(
int
r,
int
c,
int
row,
int
col,
int
[][] grid)
{
Queue<(
int
,
int
)> q =
new
Queue<(
int
,
int
)>();
q.Enqueue((r, c));
grid[r] = 1;
int
[] dr = { 1, -1, 0, 0 };
int
[] dc = { 0, 0, 1, -1 };
while
(q.Count > 0)
{
(
int
currRow,
int
currCol) = q.Dequeue();
for
(
int
i = 0; i < 4; i++)
{
int
nr = currRow + dr[i];
int
nc = currCol + dc[i];
if
(Check(row, col, nr, nc) && grid[nr][nc] == 0)
{
q.Enqueue((nr, nc));
grid[nr][nc] = 1;
}
}
}
}
static
int
CountOperations(
int
row,
int
col,
int
[][] grid)
{
int
count = 0;
for
(
int
i = 0; i < row; i++)
{
for
(
int
j = 0; j < col; j++)
{
if
(grid[i][j] == 0)
{
BFS(i, j, row, col, grid);
count++;
}
}
}
return
count - 1;
}
static
void
Main()
{
int
row = 4, col = 5;
int
[][] grid = {
new
int
[] { 0, 1, 1, 0, 1 },
new
int
[] { 0, 1, 0, 1, 0 },
new
int
[] { 0, 0, 0, 0, 1 },
new
int
[] { 0, 0, 1, 0, 0 }
};
Console.WriteLine(CountOperations(row, col, grid));
}
}