using
System;
public
class
GFG {
static
void
dfs(
int
[, ] grid,
int
[, ] visited,
int
row,
int
col)
{
if
(row >= 0 && row < grid.GetLength(0) && col >= 0
&& col < grid.GetLength(1)
&& grid[row, col] == 1
&& visited[row, col] == 0) {
visited[row, col] = 1;
dfs(grid, visited, row + 1, col);
dfs(grid, visited, row - 1, col);
dfs(grid, visited, row, col + 1);
dfs(grid, visited, row, col - 1);
}
}
public
static
int
numberOfEnclaves(
int
[, ] grid)
{
int
n = grid.GetLength(0);
int
m = grid.GetLength(1);
int
[, ] visited =
new
int
[n, m];
for
(
int
i = 0; i < n; i++) {
if
(visited[i, 0] == 0 && grid[i, 0] == 1) {
dfs(grid, visited, i, 0);
}
if
(visited[i, m - 1] == 0
&& grid[i, m - 1] == 1) {
dfs(grid, visited, i, m - 1);
}
}
for
(
int
j = 0; j < m; j++) {
if
(visited[0, j] == 0 && grid[0, j] == 1) {
dfs(grid, visited, 0, j);
}
if
(visited[n - 1, j] == 0
&& grid[n - 1, j] == 1) {
dfs(grid, visited, n - 1, j);
}
}
int
count = 0;
for
(
int
i = 0; i < n; i++) {
for
(
int
j = 0; j < m; j++) {
if
(visited[i, j] == 0 && grid[i, j] == 1)
count++;
}
}
return
count;
}
static
public
void
Main()
{
int
N = 4;
int
[, ] graph =
new
int
[4, 4] { { 0, 0, 0, 0 },
{ 1, 0, 1, 0 },
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 } };
Console.WriteLine(numberOfEnclaves(graph));
}
}