【问题标题】:Finding target coordinates for Manhattan Distance in 8 Puzzle | C++在 8 谜题中找到曼哈顿距离的目标坐标 | C++
【发布时间】:2016-11-10 22:45:37
【问题描述】:

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

我无法找到获取任何特定值的目标坐标的方法。

【问题讨论】:

    标签: c++ math distance


    【解决方案1】:

    n 的目标坐标是((n-1) div 3, (n-1) mod 3)

    以上值的定义假设原点(0,0) 位于左上角,即放置 1 的正方形。 X坐标向右增加,Y坐标向下增加。

    【讨论】:

    • 很抱歉,您能进一步解释一下吗?虽然我看到它有效,但我不太明白你是如何得出这个答案的。
    • 如果我理解正确,对于 1 它应该返回 (0, 0) 但它返回 (0, 1)
    • 其实我认为,对于任何值 n,它都应该是 ((n-1) div 3, (n-1) mod 3)。
    • @SpiceTrader:你是对的。我实际上是匆忙写了这篇文章,然后离开了一些工作。编辑了答案。希望这对您有所帮助。
    【解决方案2】:

    您可能是指二维数组。类似于您的代码 int matrix[3][3]

    您要问的问题不是很清楚,因为您不是在寻找“两个二维数组之间的曼哈顿距离”,而是在寻找“数组中两个特定元素之间的曼哈顿距离”。例如,在您的情况下,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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多