我想解決在C++ 2d數組的小例子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;
}
預期產量是多少?另請**請準確描述您正在嘗試做什麼.................... – gsamaras