12 void reverse(vector<int> &path,
int start,
int end,
int n)
14 while (end - start > 0)
18 int temp = path[start % n];
19 path[start % n] = path[end % n];
27 int is_path_shorter(
double **graph,
int v1,
int v2,
int v3,
int v4,
double &total_dist)
29 if ((graph[v1][v3] + graph[v2][v4]) < (graph[v1][v2] + graph[v3][v4]))
31 total_dist -= (graph[v1][v2] + graph[v3][v4] - graph[v1][v3]
40 double twoOpt(
double **graph, vector<int> &path,
double &pathLength,
int n)
44 double old_distance = pathLength;
49 for (
int i = 0; i < n; i++)
56 for (
int j = i + 2; (j + 1) % n != i; j++)
65 path[v2], pathLength))
71 if (pathLength - old_distance < 5 && counter == term_cond)
75 if (pathLength - old_distance > term_cond )
78 old_distance = pathLength;
90 for (
int i = 0; i < size-1; i++)
92 length += graph[path[i]][path[i+1]];
94 length += graph[path[size-1]] [path[0]];
double twoOpt(double **graph, vector< int > &path, double &pathLength, int n)
double get_path_length(double **graph, vector< int > &path, int size)
int is_path_shorter(double **graph, int v1, int v2, int v3, int v4, double &total_dist)
void reverse(vector< int > &path, int start, int end, int n)