不知为何,我无法让distance
函数正常工作。能有人解释一下我哪里做错了么?
主函数:
#include <iostream>#include <cmath> using namespace std;int distance(int**, int); int main() { int m; int goal [3][3] = { {1,2,3},{4,5,6},{7,8,0}}; const int N = 3; int intial[N][N]; cout << "Enter in values: \n"; for(int i=0; i<3; i++) //This loops on the rows.{ for(int j=0; j<3; j++) //This loops on the columns { cin >> intial[i][j]; }} cout << goal[0][0] << "\n" ; m = distance(intial,N); system("PAUSE"); return 0; }
曼哈顿距离计算!
int distance(int** array,int N) { int MSum = 0; for (int x = 0; x < N; x++){ //Transversing rows(i) for (int y = 0; y < N; y++) { //traversing colums (j) int value = array[x][y]; // sets int to the value of space on board if (value != 0) { // Don't compute MD for element 0 int targetX = (value - 1) / N; // expected x-coordinate (row) int targetY = (value - 1) % N; // expected y-coordinate (col) int dx = x - targetX; // x-distance to expected coordinate int dy = y - targetY; // y-distance to expected coordinate MSum += abs(dx) +abs(dy); } } } int m = MSum; return m; }
回答:
从逻辑上看,这看起来基本上是正确的。你传入的数组应该与函数的声明和实现兼容。这里是一个示例声明:
int distance(int array[3][3],int N);