2017-02-28 54 views
-5

我有二維數組是這樣的:如何標記二維數組中的連接組件?

0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 1 0 1 0 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 0 0 1 1 1 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 1 1 1 1 1 0 0 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0

我要標註所連接的部件(4個方向)是這樣的:

0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 2 2 2 0 3 3 0 1 0 0 0 0 0 1 0 0 2 0 2 0 3 3 0 1 0 4 4 4 0 1 0 0 2 0 2 0 0 0 0 1 0 4 0 4 0 1 0 0 2 0 2 0 0 0 0 1 0 4 0 4 0 1 0 0 2 2 2 0 0 0 0 1 0 4 0 4 0 1 0 0 0 0 0 5 5 5 0 1 0 4 4 4 0 1 0 0 0 0 0 5 0 5 0 1 0 0 0 0 0 1 0 0 0 0 0 5 5 5 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 0 0 0 0 7 7 7 7 0 0 0 6 0 0 0 6 0 0 0 0 7 0 0 7 0 0 0 6 0 6 6 6 6 6 0 0 7 7 7 7 0 0 0 6 0 6 0 6 0 6 0 0 7 7 7 7 0 0 0 6 6 6 6 6 6 6 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 0 0 0 0 0 0 0 0

請幫我解決這個問題。謝謝!!!(java或javascript代碼示例會很棒)

+1

你已經完成的工作來解決這個問題? –

+0

我爲行和列做了2個循環,然後對於每個元素,我檢查方向以查看它們的鄰居是否是相同的數字,然後對它們進行分組。但我總是有這樣的衝突。 –

+0

@ThienN請不要完全改變已回答的問題。如果可以,請詢問一個新的。 – ChrisF

回答

1

首先,將1的值更改爲-1,因爲您需要使用1作爲標誌。

然後,您可以迭代元素並執行檢查,如果它有標記-1,則將其更改爲實際值。繼續處理右側和底部的元素。

如果找到元素,則增加值。

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, j + 1, value); 
 
     return true; 
 
    } 
 
} 
 

 
var data = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1], [0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1], [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1], [0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0], [0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0]], 
 
    value = 1; 
 

 
data.forEach(function (a) { 
 
    a.forEach(function (b, i, bb) { 
 
     bb[i] = -b; 
 
    }); 
 
}); 
 

 
data.forEach(function (a, i, aa) { 
 
    a.forEach(function (b, j, bb) { 
 
     test(aa, i, j, value) && value++; 
 
    }); 
 
}); 
 

 
document.getElementById('out').innerHTML = data.map(function (a) { return a.join(' '); }).join('\n');
<pre id="out"></pre>

+0

我只是稍微更新了一下這個問題,你能幫我解決這個問題嗎? –

+0

@ThienN,其實你提出了一個全新的問題..請回到原來的問題 - 並要求一個新的問題。 –

+0

我沒有足夠的分數來問新的問題。我必須再等3天才能做到這一點。你知道我怎麼能得到更多的點,所以我可以問更多的問題嗎? –