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

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

我正在尝试找到一种方法来计算两个包含 0 到 8 之间数字的二维数组之间的曼哈顿距离。假设其中一个数组(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 matrix[3][3]

你问的问题不是很清楚,因为你不是在寻找“两个二维数组之间的曼哈顿距离”,而是在寻找“数组中两个特定元素之间的曼哈顿距离”。例如,您的情况下 2 和 6 之间的距离将计算如下:

获取两个元素的二维坐标:

2的坐标:x2=1,y2=0(2的x和y坐标)

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

获取曼哈顿距离:

曼哈顿距离 = abs(x6 – x2) + abs(y6 – y2);

替换:abs(2 – 1) + abs(1 – 0);

答案:2