我正在尝试使用多维数组解决 C++ 中的 TSP,但收到有关类型转换的错误消息。
由于几年没有使用 C++,我对 C++ 感到生疏,因此为了重新学习,我决定尝试一些旅行推销员解决方案。我使用的第一个使用多维数组来存储随机分配的点。那部分工作正常,所以我继续使用距离公式。我为基本距离公式创建了一个辅助函数,它将 2 个数组作为其输入,它本身运行良好,然后创建了一个函数来查找完整城市数组的总距离。它接受一个 double 组和一个表示城市总数的整数,然后遍历该数组以找到每个点的距离并将它们相加。
这里是变量声明和随机点赋值
int numCities = 10;
double cities[numCities][2];
//Creates random(unseeded) points
for(int i = 0; i < numCities; i++){
for(int j = 0; j < 2; j++){
cities[i][j] = (rand() % 100) + 1;
}
}
这是用来调用函数的行
cout << distTotal(cities, numCities) << endl;
这是函数和辅助函数
//basic distance formula
double cityDist(double cityA[], double cityB[]){
return sqrt(pow((cityB[0]-cityA[0]), 2.0)+
pow((cityB[1]-cityA[1]), 2.0));
}
//calculate total distance of group of cities
double distTotal(double* points[], int num){
double total = 0;
for(int i = 0; i < num-1; i++){
total=total+cityDist(points[i], points[i+1]);
}
return total;
}
所以理想情况下,这应该给出此处给出的基本顺序中所有点之间的总距离。但是,我目前收到以下错误:
error: cannot convert 'double (*)[2]' to 'double**' for argument '1' to 'double distTotal(double**, int)'
如果我没记错的话,这可能与指针有关,但老实说,我对 C++ 指针的内存还不够,不知道如何修复它。
感谢任何帮助,谢谢
最佳答案
您的声明应为 double* points
因为 C 数组会衰减为指针。如果使用 C++,您可以考虑使用 std::vector<double>&
作为输入。
编辑:如果您最终使用 c 数组,您将不得不在堆上分配它们并释放资源。
关于c++ - 我在 TSP 的 C++ 解决方案中遇到转换错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56614806/