Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在8个拼图| C+中查找曼哈顿距离的目标坐标+;_C++_Math_Distance - Fatal编程技术网

C++ 在8个拼图| C+中查找曼哈顿距离的目标坐标+;

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

我试图找到一种方法来计算两个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
        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;
        }
}