2016-02-04 53 views
0

我想解決在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; 
} 
+0

預期產量是多少?另請**請準確描述您正在嘗試做什麼.................... – gsamaras

回答

0

你的代碼有語法錯誤。

visited[0] = { startNode }; 

只有一個元素不需要{},你應該

visited[0] = startNode; 

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

初始分配極品 「=」,你應該

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

和訪問需要初始或分配。

+0

嗨,謝謝。但是這並沒有解決我的問題。 – user3264301

+0

我嘗試複製你的code.and改變語法的錯誤。該程序可以工作。儘管我不知道結果是真是假,但它可能會導致結果。 – Getname