Вы можете передать фактическое значение и искать только соседние одинаковые значения.
Я добавляю некоторую визуализацию для найденных островов / стран.
function countIslands(A) {
const row = A.length;
const col = A[0].length;
const search = (row, col, A, value) => {
if (row < 0 || col < 0 || row >= A.length || col >= A[row].length || A[row][col] !== value) {
return;
}
A[row][col] = 0;
search(row - 1, col, A, value);
search(row, col - 1, A, value);
search(row + 1, col, A, value);
search(row, col + 1, A, value);
}
let count = 0;
A.forEach((row, index) => {
row.forEach((value, indexI) => {
if (value !== 0) {
A.forEach(a => console.log(...a));
console.log('');
search(index, indexI, A, value);
count++;
}
})
})
A.forEach(a => console.log(...a))
return count;
}
console.log(countIslands([[1, 1, 2, 2], [1, 2, 2, 3], [5, 5, 2, 1]]));
.as-console-wrapper { max-height: 100% !important; top: 0; }