8拼图曼哈顿距离

时间:2016-07-24 00:08:57

标签: java distance

对于8个拼图分配,我们需要在两个1d数组之间为manhattan distance编写函数。用户输入包含数组初始状态的数组,然后输入数组的目标状态。它们都包含8个整数,0表示空白。我不知道我的代码错在哪里:

     for(int i =0; i< firstState.length-1; i++)
    {
        for(int j = i+1; j< firstState.length; j++)
        {
            if(firstState[i] == goalState[j])
                result += Math.abs(firstState[i]-goalState[i]);
        }
        System.out.println(result);
    return result;
    }
                System.out.println(result);

    return result;

1 个答案:

答案 0 :(得分:0)

Manhattan Distance的定义:

<块引用>

沿直角轴测量的两点之间的距离。在 p1 位于 (x1, y1) 且 p2 位于 (x2, y2) 的平面中,它是 |x1 - x2| + |y1 - y2|。

因此,显然您需要将 1d-array 扩展为 2d-board 来计算曼哈顿距离。您可以通过以下代码执行此操作:

for(int i=0; i<3; i+=1) {
    for(int j=0; j<3; j+=1) {
        if(firstState[(i*3)+j] != 0 && firstState[(i*3)+j] != goalState[(i*3)+j]) {
            bool found = false;
            for(int ii=0; ii<3; ii+=1) {
                for(int jj=0; jj<3; jj+=1) {
                    if(firstState[(i*3)+j] == goalState[(ii*3)+jj]) {
                        ret += (utils::_abs(i-ii) + utils::_abs(j-jj));
                        found = true;
                        break;
                    }
                }
                if(found) break;
            }
        }
    }
}