javascript - 岛数二维数组算法

标签 javascript algorithm

let arr = [[1, 0, 1],
           [1, 0, 0],
           [1, 1, 1]
     ];

我有一个数组,其中 1 岛和 0 水。我需要写一个岛柜台。这里有 2 个岛 1 个大和 1 个小(单人)。例如这里有 5 个单岛

let arr = [[1, 0, 1],
           [0, 1, 0],
           [1, 0, 1]
     ]; 

我写了双循环来吸引数组中的每个项目,如下所示:

for(let i = 0; i < arr.length; i++){
    for(let x = 0; x < arr[i].length; x++){
         if(...){}
    }
 }

我需要为此编写条件。请帮助我。

最佳答案

您可以使用计数器并检查所有相邻项目并使用实际计数器更新元素。

function check(array) {

    function test(array, i, j, value) {
        if (array[i] && array[i][j] === -1) {
            array[i][j] = value;
            test(array, i -1, j, value);
            test(array, i + 1, j, value);
            test(array, i, j - 1, value);
            test(array, i, j + 1, value);
            return true;
        }
    }
    var value = 1;

    array.forEach(a=> a.forEach((b, i, bb) => bb[i] = -b));
    array.forEach((a, i, aa) => a.forEach((b, j) => test(aa, i, j, value) && value++));
    document.getElementById('out').innerHTML += array.map(a => a.join(' ')).join('\n') + '<hr>';
    return value - 1;
}

console.log(check([[1, 0, 1], [1, 0, 0], [1, 1, 1]]));
console.log(check([[1, 0, 1], [0, 1, 0], [1, 0, 1]]));
<pre id="out"></pre>

关于javascript - 岛数二维数组算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47727775/

相关文章:

javascript - 如何忽略javascript中的事件?

javascript - 如何将对象属性设置在不同的地方?

algorithm - 最小电阻算法

algorithm - 匈牙利戒指拼图

javascript - 像素化图像数据算法非常慢

objective-c - 在 Objective-C 中实现分水岭分割

javascript - 将 html 元素值设置为 "runtime"

javascript - 我可以使用 jquery 或 javascript 将数据连续附加到特定的 td 吗?

python - 具有最大池化的卷积神经网络 (CNN)

javascript - 在表单上跳转到页面顶部提交到新页面