using
System;
using
System.Collections.Generic;
class
GFG
{
static
bool
isValid(
int
i,
int
j,
int
n)
{
if
(i < 0 || j < 0 || i >= n || j >= n)
return
false
;
return
true
;
}
static
int
numdays(
char
[, ] arr,
int
n)
{
int
numdays = 0;
int
i, j;
List<
int
[]> q =
new
List<
int
[]>();
for
(i = 0; i < n; i++)
for
(j = 0; j < n; j++)
{
if
(arr[i, j] ==
'U'
)
q.Add(
new
int
[] {i, j});
}
q.Add(
new
int
[] {-1, -1});
int
[] temp = {-1, -1};
int
flag = 0;
while
(q.Count > 0){
temp = q[0];
i = temp[0];
j = temp[1];
q.RemoveAt(0);
if
(i == -1 && j == -1) {
flag++;
q.Add(
new
int
[] {-1, -1});
if
(flag == 2)
break
;
numdays++;
}
else
{
flag = 0;
if
(isValid(i - 1, j - 1, n) &&
arr[i - 1, j - 1] ==
'H'
) {
q.Add(
new
int
[] {i - 1, j - 1});
arr[i - 1, j - 1] =
'U'
;
}
if
(isValid(i - 1, j, n) &&
arr[i - 1, j] ==
'H'
) {
q.Add(
new
int
[] {i - 1, j});
arr[i - 1, j] =
'U'
;
}
if
(isValid(i - 1, j + 1, n) &&
arr[i - 1, j + 1] ==
'H'
) {
q.Add(
new
int
[] {i - 1, j + 1});
arr[i - 1, j + 1] =
'U'
;
}
if
(isValid(i, j - 1, n) &&
arr[i, j - 1] ==
'H'
) {
q.Add(
new
int
[] {i, j - 1});
arr[i, j - 1] =
'U'
;
}
if
(isValid(i, j + 1, n) &&
arr[i, j + 1] ==
'H'
) {
q.Add(
new
int
[] {i, j + 1});
arr[i, j + 1] =
'U'
;
}
if
(isValid(i + 1, j - 1, n) &&
arr[i + 1, j - 1] ==
'H'
) {
q.Add(
new
int
[] {i + 1, j - 1});
arr[i + 1, j - 1] =
'U'
;
}
if
(isValid(i + 1, j, n) &&
arr[i + 1, j] ==
'H'
) {
q.Add(
new
int
[] {i + 1, j});
arr[i + 1, j] =
'U'
;
}
if
(isValid(i + 1, j + 1, n) &&
arr[i + 1, j + 1] ==
'H'
) {
q.Add(
new
int
[] {i + 1, j + 1});
arr[i + 1, j + 1] =
'U'
;
}
}
}
return
numdays - 1;
}
public
static
void
Main(
string
[] args)
{
int
n = 4;
char
[,] arr = { {
'H'
,
'H'
,
'H'
,
'U'
},
{
'H'
,
'H'
,
'H'
,
'H'
},
{
'H'
,
'H'
,
'U'
,
'H'
},
{
'H'
,
'H'
,
'H'
,
'H'
}};
int
ans = numdays(arr, n);
Console.Write(
"number of days taken : "
+ ans);
}
}