<script>
let C = 5;
let R = 3;
let INT_MAX = 10000000;
let table =
new
Array(R);
let visited =
new
Array(R);
for
(let i = 0; i < R; i++)
{
table[i] =
new
Array(C);
visited[i] =
new
Array(C);
}
function
min(p, q, r, s)
{
let temp1 = p < q ? p : q;
let temp2 = r < s ? r : s;
if
(temp1 < temp2)
return
temp1;
return
temp2;
}
function
Distance(arr, i, j)
{
if
(i >= R || j >= C || i < 0 || j < 0)
return
INT_MAX;
else
if
(arr[i][j] == 0) {
table[i][j] = INT_MAX;
return
INT_MAX;
}
else
if
(arr[i][j] == 2) {
table[i][j] = 0;
return
0;
}
else
if
(visited[i][j] == 1) {
return
INT_MAX;
}
else
{
visited[i][j] = 1;
let temp1 = Distance(arr, i + 1, j);
let temp2 = Distance(arr, i - 1, j);
let temp3 = Distance(arr, i, j + 1);
let temp4 = Distance(arr, i, j - 1);
let min_value
= 1 + min(temp1, temp2, temp3, temp4);
if
(table[i][j] > 0 &&
table[i][j] < INT_MAX) {
if
(min_value < table[i][j])
table[i][j] = min_value;
}
else
table[i][j] = min_value;
visited[i][j] = 0;
}
return
table[i][j];
}
function
minTime(arr)
{
let max = 0;
for
(let i = 0; i < R; i++) {
for
(let j = 0; j < C; j++) {
if
(arr[i][j] == 1)
Distance(arr, i, j);
}
}
for
(let i = 0; i < R; i++) {
for
(let j = 0; j < C; j++) {
if
(arr[i][j] == 1 &&
table[i][j] > max)
max = table[i][j];
}
}
if
(max < INT_MAX)
return
max;
return
-1;
}
let arr = [[ 2, 1, 0, 2, 1],[0, 0, 1, 2, 1 ],[1, 0, 0, 2, 1]]
document.write(minTime(arr));
</script>