Cześć !
Prosił bym o pomoc w zrozumieniu fragmentu pewnego algorytmu.
Chodzi mi o problem Kominwojażera. Załóżmy, że mam strukturę:
struct points
{
int ordinal_number;
int x_cordinate;
int y_cordinate;
};
2. vector na tą strukturę, który przechowuje jakieś rozwiązanie problemu (drogę po wszystkich punktach).
3. Drogę początkową (suma odległości między punktami w vector).
Czytałem o algorytmie który zamienia parami poszczególne wierzchołki i sprawdza czy droga jest krótsza, problem w tym że nie wiem za bardzo jak to ugryźć od strony technicznej.
int number_of_points = point_s.size();
for (int i = 0; i < number_of_points - 2; i++)
{
for (int j = i + 2; j < number_of_points; j++)
{
// obliczanie kosztu zmiany sasiadow
double change =
calculate_cost(point_s[i].ordinal_number, point_s[i].x_cordinate, point_s[i].y_cordinate, point_s[j].ordinal_number, point_s[j].x_cordinate, point_s[j].y_cordinate) +
calculate_cost(point_s[i+1].ordinal_number, point_s[i+1].x_cordinate, point_s[i+1].y_cordinate, point_s[j+1].ordinal_number, point_s[j+1].x_cordinate, point_s[j+1].y_cordinate) -
calculate_cost(point_s[i].ordinal_number, point_s[i].x_cordinate, point_s[i].y_cordinate, point_s[i+1].ordinal_number, point_s[i+1].x_cordinate, point_s[i+1].y_cordinate) -
calculate_cost(point_s[j].ordinal_number, point_s[j].x_cordinate, point_s[j].y_cordinate, point_s[j+1].ordinal_number, point_s[j+1].x_cordinate, point_s[j+1].y_cordinate);
}
Napisałem coś takiego i dalej nie wiem jak to ma działać, żeby było dobrze. Funkcja która tu jest to po prostu obliczanie odległości z pkt A do B.
Proszę o jakieś objaśnienie lub naprowadzenie jak to powinno wyglądać.
Z góry dziękuję i pozdrawiam ! :)