假设我有一个5x5二维阵列。对于数组中的给定位置,我需要检查相邻位置是否包含某个特定值。如何处理位于数组边缘的元素?
例如,我的第一个想法是处理这样的事情;
if(array[i-1][j] != 'A' && array[i][j-1] != 'A' && array[i+1][j] != 'A' && array[i][j+1] != 'A')但给定i或j为0/4的任何元素,其中一条(或两条)语句将尝试检查超出数组维数界限的内容。有没有一种干净利落的方法,不用嵌套一堆if语句来检查元素是否在边缘?
发布于 2020-05-12 15:21:00
您可以使用布尔逻辑和短路评估
if ((i == 0 || array[i-1][j] != 'A') &&
(j == 0 || array[i][j-1] != 'A') &&
(i == 4 || array[i+1][j] != 'A') &&
(j == 4 || array[i][j+1] != 'A'))
{
...
}我假设你想把array[-1][j] != 'A'等认为是真的。如果不是,则表达式将更改。
发布于 2020-05-12 15:21:09
这是图像处理中的一个常见问题。正如molbdnilo在评论中指出的那样,一种常见的解决方案是添加一些填充;由于您使用的是3x3邻域,因此您需要在所有边只添加一个像素。
有时使用的另一种解决方案是镜像超出图像界限的访问。也就是说,如果是x>bound,你就用(2*bound-x)代替,y也一样,或者你也可以用if (x>bound) x=bound。这里的一个共同因素是通过分别处理x和y来限制if语句的数量。
发布于 2020-05-12 15:14:20
您可以尝试将算法分成两部分:
在每种情况下,你都知道自己处于什么状态,所以你可以最小化检查
https://stackoverflow.com/questions/61745814
复制相似问题