我正在尝试创建一个本地搜索启发式来解决 TSP,这个过程似乎失败了。我生成了一个随机哈密顿循环并将其存储在传出 [] 中,传出 [i] 表示源自 i 的边之一指向的顶点。distances[a][b] 表示从顶点 a 到顶点 b 的距离。但是,每当我运行此代码时,算法并没有优化我传入传出的哈密顿循环,而是简单地创建新循环 0->numcities-2->1->numcities-1。如果它可以提高顶点到其输出顶点的距离,它应该简单地重复切换输出顶点。我可能忽略了一些小事,但我根本无法弄清楚我做错了什么。顺便说一句,我将运行多次,这就是布尔值更改的用途。
for(int i = 0; i < numcities; i++)
{
for(int j = i+1; j < numcities; j++)
{
if(distances[i][outgoing[i]] + distances[j][outgoing[j]] > distances[i][outgoing[j]] + distances[j][outgoing[i]] && i != outgoing[j] && j != outgoing[i])
{
changed = true;
int temp = outgoing[j];
outgoing[j] = outgoing[i];
outgoing[i] = temp;
}
}
}