2017-12-09 20 views
1
let arr = [[1, 0, 1], 
      [1, 0, 0], 
      [1, 1, 1] 
    ]; 

私は1-islandと0-waterの配列を持っています。私は島のカウンターを書く必要があります。ここには、2つの大きな島1と小さな1つ(シングルス)があります。例えば、ここに5つの島々島数2次元配列アルゴリズム

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(...){} 
    } 
} 

と私は、このためにсonditionを記述する必要があります。お願い助けて。

+0

指名手配結果は何ですか?島の数?サイズ? –

+0

ああ申し訳ありません、私は書くのを忘れました。私は島の数が必要です –

答えて

1

カウンタを使用して、隣接するすべてのアイテムをチェックし、要素を実際のカウンタで更新することができます。

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>

+0

ありがとうございます –