2017-02-28 70 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天才能做到这一点。你知道我怎么能得到更多的点,所以我可以问更多的问题吗? –