【问题标题】:How to solve the nearest neighbor heuristic如何解决最近邻启发式
【发布时间】:2016-02-05 21:28:12
【问题描述】:

我正在尝试在 C++ 中使用二维数组的一个小示例中解决 tsp 的最近邻启发式算法。这是我现在的代码。我想用从 0 到 6 的起始节点创建游览,所以我可以在之后比较它们(哪个距离最短)。 但是,调试后我有点知道我的问题出在哪里,但我不明白为什么它不起作用。我的visited[i+1] 没有在下一个索引上保存最小索引。

void getNearestNeighbor(float distanceMatrix[][6], int startNode, int visited[6]){

    bool unvisited[6]{ 1,1,1,1,1,1 };
    visited[0] = { startNode };
    unvisited[startNode] = false;
    for (int i = 0; i < 5; i++)
    {
        float smallestDistance = 100.0;
        int smallestIndex =visited[i];

        for (int j = 0; j < 6; j++)
        {

            if (visited[i] != j && unvisited[j] == true)
            {
                if (smallestDistance > distanceMatrix[visited[i]][j])
                {
                    smallestDistance = distanceMatrix[visited[i]][j];
                    smallestIndex = j;
                }
            }
        }

        visited[i+1] = smallestIndex;
        unvisited[smallestIndex] = false;
        //cout << visited[i] << endl;
    }
}   

int main()
{
    int visited[6]; 
    float distanceMatrix[6][6]{
        { 0, 17, 11, 5.39, 10.8, 8.6 },
        { 17, 0, 10.2, 12.5, 19.1, 25.6 },
        { 11, 10.2, 0, 9.85, 18.8, 19 },
        { 5.39, 12.5, 9.85, 0, 8.94, 13.5 },
        { 10.8, 19.1, 18.8, 8.94, 0, 14 },
        { 8.6, 25.6, 19, 13.5, 14, 0 } };


    for (int srtNode = 0; srtNode < 6; srtNode++)
    {
        getNearestNeighbor(distanceMatrix, srtNode, visited);
        cout << visited[srtNode];
        //calcDistance(distanceMatrix, visited);
    }

    system("pause");

    return EXIT_SUCCESS;
}

【问题讨论】:

  • 预期的输出是什么?另外准确描述您要做什么......................

标签: c++ arrays nearest-neighbor


【解决方案1】:

你的代码有语法错误。

visited[0] = { startNode };

只有一个元素不需要{},你应该

visited[0] = startNode;

还有这个

bool unvisited[6]{ 1,1,1,1,1,1 };

初始赋值需要“=”,你应该

bool unvisited[6] = { 1,1,1,1,1,1 };

和访问需要初始或分配。

【讨论】:

  • 我尝试复制您的代码。并更改语法错误。程序可以工作。虽然我不知道结果是真还是假。但它可以输出结果。
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 2020-12-31
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2011-11-10
  • 2019-02-26
相关资源
最近更新 更多