using
System;
public
class
GFG
{
static
void
traverse(
int
i,
int
j,
int
N,
int
M,
bool
[, ] vis,
bool
[, ] row,
bool
[, ] col)
{
if
(i <= 0 || i > N || j <= 0 || j > M || vis[i, j])
return
;
vis[i, j] =
true
;
if
(row[i, j])
traverse(i, j + 1, N, M, vis, row, col);
if
(col[i, j])
traverse(i + 1, j, N, M, vis, row, col);
if
(row[i, j - 1])
traverse(i, j - 1, N, M, vis, row, col);
if
(col[i - 1, j])
traverse(i - 1, j, N, M, vis, row, col);
}
static
int
count(
int
N,
int
M,
int
K,
int
[, ] q)
{
bool
[, ] row =
new
bool
[N + 1, M + 1];
bool
[, ] col =
new
bool
[N + 1, M + 1];
bool
[, ] vis =
new
bool
[N + 1, M + 1];
for
(
int
i = 0; i < N + 1; i++) {
for
(
int
j = 0; j < M + 1; j++) {
row[i, j] =
true
;
col[i, j] =
true
;
vis[i, j] =
false
;
}
}
for
(
int
i = 0; i < K; i++)
{
if
(q[i, 0] == q[i, 2]) {
int
mn = Math.Min(q[i, 1], q[i, 3]);
row[q[i, 0], mn] =
false
;
}
else
{
int
mn = Math.Min(q[i, 0], q[i, 2]);
col[mn, q[i, 1]] =
false
;
}
}
int
TotalRegion = 0;
for
(
int
i = 1; i <= N; i++)
{
for
(
int
j = 1; j <= M; j++)
{
if
(!vis[i, j]) {
TotalRegion++;
traverse(i, j, N, M, vis, row, col);
}
}
}
return
TotalRegion;
}
public
static
void
Main(
string
[] args)
{
int
[, ] q = { { 2, 1, 2, 2 }, { 1, 2, 2, 2 },
{ 1, 3, 2, 3 }, { 1, 4, 2, 4 },
{ 2, 3, 3, 3 }, { 3, 3, 3, 4 },
{ 3, 3, 4, 3 }, { 3, 3, 3, 2 },
{ 3, 1, 3, 2 }, { 4, 1, 4, 2 } };
int
N = 5, M = 5;
int
K = 10;
Console.WriteLine(count(N, M, K, q));
}
}