对于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;
答案 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;
}
}
}
}