在 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
我正在尝试找到一种方法来计算两个包含 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