C++ 在8个拼图| C+中查找曼哈顿距离的目标坐标+;
我试图找到一种方法来计算两个2D数组之间的曼哈顿距离,其中包含0到8之间的数字。假设其中一个数组(8字谜的目标)是: 我理解在(x1,y1)和(x2,y2)之间 曼哈顿距离=| x1-x2 |+| y1-y2| 我的代码看起来像:C++ 在8个拼图| C+中查找曼哈顿距离的目标坐标+;,c++,math,distance,C++,Math,Distance,我试图找到一种方法来计算两个2D数组之间的曼哈顿距离,其中包含0到8之间的数字。假设其中一个数组(8字谜的目标)是: 我理解在(x1,y1)和(x2,y2)之间 曼哈顿距离=| x1-x2 |+| y1-y2| 我的代码看起来像: for(x = 0; x < 3; x++){ for(y = 0; y < 3; y++){ int value = matrix[x][y]; int targX; //Target X coordinate
for(x = 0; x < 3; x++){
for(y = 0; y < 3; y++){
int value = matrix[x][y];
int targX; //Target X coordinate
int targY; //Target Y coordinate
int distX = abs(x - targX);
int distY = abs(y - targY);
mDist = mDist + distX + distY;
}
}
(x=0;x<3;x++)的{
对于(y=0;y<3;y++){
int值=矩阵[x][y];
int targX;//目标X坐标
int-targety;//目标Y坐标
int distX=abs(x-targX);
int distY=abs(y-targY);
mDist=mDist+distX+distY;
}
}
我很难找到一种方法来获取任何特定值的目标坐标。值的目标坐标
n
是((n-1)div 3,(n-1)mod 3)
假设原点
(0,0)
位于左上角,即放置1的正方形,将定义上述值。X坐标向右增加,Y坐标向下增加。您可能指的是二维数组。类似于您的代码int矩阵[3][3]中已有的内容
你问的问题不是很清楚,因为你不是在寻找“两个2D数组之间的曼哈顿距离”,而是在寻找“数组中两个特定元素之间的曼哈顿距离”。例如,在您的情况下,2和6之间的距离将按如下方式计算:
获取两个元素的二维坐标:
2的坐标:x2=1,y2=0(x和y坐标为2)
6的坐标:x6=2,y6=1(x和y坐标为6)
获取曼哈顿距离:
曼哈顿距离=abs(x6-x2)+abs(y6-y2)
替代品:abs(2-1)+abs(1-0)
回答:2对不起,你能进一步解释一下吗?虽然我知道它是有效的,但我不太明白你是如何得出这个答案的。如果我理解正确,对于1,它应该返回(0,0),但它返回(0,1)。实际上我认为,对于任何值n,它应该是((n-1)div 3,(n-1)mod 3)。@SpiceTrader:你是正确的。事实上,我很匆忙地写了这篇文章,然后去做了一些工作。编辑了答案。希望这对你有帮助。
for(x = 0; x < 3; x++){
for(y = 0; y < 3; y++){
int value = matrix[x][y];
int targX; //Target X coordinate
int targY; //Target Y coordinate
int distX = abs(x - targX);
int distY = abs(y - targY);
mDist = mDist + distX + distY;
}
}