在8个谜题|C++中寻找曼哈顿距离的目标坐标

Finding target coordinates for Manhattan Distance in 8 Puzzle | C++

本文关键字:曼哈顿距离 寻找 目标 坐标 C++ 8个      更新时间:2023-10-16

我正试图找到一种方法来计算两个包含0到8之间数字的2D数组之间的曼哈顿距离。假设其中一个数组(8谜题的目标)是:

1  2  3
4  5  6
7  8  0

我理解在(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;
        }
}

我很难找到一种方法来获得任何特定值的目标坐标。

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(2的x和y坐标)

6的坐标:x6=2,y6=1(6的x和y坐标)

获得曼哈顿距离:

曼哈顿距离=腹肌(x6–x2)+腹肌(y6–y2)

替补:腹肌(2–1)+腹肌(1–0)

答案:2