c++ - 我在 TSP 的 C++ 解决方案中遇到转换错误

标签 c++ codeblocks traveling-salesman

我正在尝试使用多维数组解决 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/

相关文章:

c++ - 有效地将数值 vector 的每个元素与前一个元素进行比较

c++ - 将十六进制 std::string 转换为无符号字符

c++ - 问题(链接、崩溃)

codeblocks - 如何在 Code::Blocks 12.11 中指定调试器程序?

google-maps - 有一些限制的旅行推销员

java - 2 最优求解TSP的opt算法

c++ - boost 0 的 unordered_map 键值

c++ - OpenCV 3.0 正常贝叶斯分类器错误

c - 如何在代码块中使用声音和无声音功能

java - 在 Java 中使用动态规划求解 TSP