我正在尝试找到确定元素是否与未排序的二维数组中的另一个元素相邻的最佳方法。例如,如果将myArray [2,2]传递给我的比较函数,我希望输入等于位置[1,2],[3,2],[2,1]和[2,3]的元素返回true,以及返回false的任何其他输入。这是基于用户输入。
例如,假设目标值“13”存储在[2,2]。如果用户输入“8”,则在数组中搜索值“8”,该值在位置[1,2]处找到。由于它与目标值[2,2]相邻,因此返回一个真值。
我想出了一个功能来做到这一点,但我不禁觉得我忽略了比我目前使用的条件更有效/更优雅的方式。我是C的新手所以请原谅任何错误。
目前,我正在使用以下功能:
_Bool withinOneOf(int x1, int y1, int x2, int y2) //compare x,y of first array element to x,y of second array element
{
_Bool xtrue = 0, ytrue = 0;
if(x1 == x2+1 || x1 == x2-1)
{
xtrue = 1;
}
if(y1 == y2+1 || y1 == y2-1)
{
ytrue = 1;
}
if(((x1==x2) && ytrue) || ((y1==y2) && xtrue)) //only want tiles that are adjacent vertically and horizontally,
{ //not diagonally.
return 1;
}
else
{
return 0;
}
}
答案 0 :(得分:3)
在Manhattan metric下计算距离的代码较少,并检查是否等于1:
ID x y size color
Old -1.350066 0.5388228 0.0010000000 Old Value
New 1.484894 -0.9232860 0.0010000000 New Value
ID 8.214781 -2.1834316 0.0006972322 Anchors
Gender -1.113282 -8.4267789 0.0006934892 Anchors
Age -2.033840 8.2530900 0.0010829137 Vital Anchors
BMI -0.688272 -8.4720884 0.0004575001 Vital Anchors