【发布时间】:2019-10-30 01:45:18
【问题描述】:
我正在尝试使用多维数组在 C++ 中解决 TSP,并收到有关类型转换的错误消息。
我已经对 C++ 生疏了几年没有使用它,所以为了重新学习,我决定尝试一些 Traveling Salesman 解决方案。我使用的第一个使用多维数组来存储随机分配的点。那部分工作得很好,所以我继续使用距离公式。我为基本距离公式创建了一个辅助函数,该函数将 2 个数组作为其输入,这些数组本身运行良好,然后创建了一个函数来查找整个城市数组的总距离。它接受一个双精度数组和一个表示城市总数的整数,然后遍历数组,找到每个点的距离并将它们加在一起。
这里是变量声明和随机点赋值
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;
}
所以理想情况下,这应该给我这里给出的基本顺序中所有点之间的总距离。但是,我目前收到以下错误:
错误:无法将参数 '1' 的 'double (*)[2]' 转换为 'double**' 到 'double distTotal(double**, int)'
如果我没记错的话,这可能与指针有关,但老实说,我对 C++ 指针的记忆还不够,不知道如何修复它。
感谢任何帮助,谢谢
【问题讨论】:
-
帮自己一个忙,把它设为
std::array<std::array<double, 2>, 10> cities;。然后,您就有了一个可用于两个维度的size()函数,并且每当您将数组作为函数的参数提供时,都不需要传递伴随变量。 -
好的,试试看。使用这种格式,如何避免上述错误?
-
你把函数的签名改成:
double distTotal(std::array<std::array<double, 2>, 10>& points); -
你需要适当地更改所有函数的签名
double cityDist(const std::array<double, 2>& cityA, const std::array<double, 2>& cityB); -
关闭。
&表示该函数将收到对该对象的引用(而不是复制整个事物)。const部分表示该函数承诺不会更改对象。
标签: c++ codeblocks traveling-salesman