Я использовал алгоритм ближайшего соседа для решения задачи коммивояжера, но он дает неоптимальный тур. Я пытался реализовать алгоритм 2-opt, но я был потерян, я надеюсь, что кто-то может помочь реализовать этот алгоритм. Вот алгоритм ближайшего соседа, который я реализовал
void matrix::algo()
{
deque <float> temp ;
vector <float> v ;
for (int i=1 ; i<n ; i++)
{
v.push_back(i) ;
}
int u=0 ;
int k=0 ;
temp.push_back(u) ;
while (!v.empty())
{
float minm=5000000 ;
for (int i=0 ; i<n ; i++)
{
if(find(temp.begin(), temp.end(), i)==temp.end())
{
if (mat[u][i]<=minm)
{
minm=mat[u][i] ;
k=i ;
}
}
}
temp.push_back(k);
u=k ;
v.erase(remove(v.begin(), v.end(), u), v.end());
}
temp.push_back(0) ;while (! temp.empty())
{
cout<<temp.front()<<"->" ;
temp.pop_front() ;
}
}
Задача ещё не решена.