在2d阵列中找到8个邻居

时间:2013-11-04 23:02:53

标签: c arrays 2d

我已经四处寻找这个问题了,关于这个问题有一些答案,但没有一个我真的理解/或者不适合我。

所以我的问题是检查包含字符的二维数组中的8个邻居,*或者O.

代码:

aliveCheck = isAlive(g,row,column-1);
if(aliveCheck){
    aliveCounter++;
}

aliveCheck = isAlive(g,row,column+1);
if(aliveCheck == 1){
    aliveCounter++;
}

aliveCheck = isAlive(g,row+1,column);
if(aliveCheck == 1){
    aliveCounter++;
}

对于所有8个邻居来说,这都有效,但我对解决方案不满意。

isAlive()是一个简单的函数,用于查找坐标是*还是O。

任何人都可以更好地解决这个问题或获得有关如何改进它的任何提示?

由于

1 个答案:

答案 0 :(得分:2)

for(int i=-1, i<=1; ++i) {
    for(int j=-1; j<=1; ++j {
        if((i || j) && isAlive(g,row+i,column+j)) {
            aliveCounter++; } } }

此方法假定i-1i+1j-1j+1都在您的数组范围内。

还应该注意的是,虽然这种方法能够在极少数行中完成你想要完成的任务,但它的可读性却低得多。因此,这种方法应附有非常具有描述性的评论。此外,这种方法(或任何其他方法)最好包含在适当命名的函数中(例如checkNeighbors)。