Advertisement
semenrbt

comi

Feb 16th, 2021
851
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5.  
  6. class route {
  7.     int* r, n;
  8. public:
  9.     route(int nn) { // Конструктор
  10.         n = nn;
  11.         r = new int[nn];
  12.         for (int i = 0; i < nn; i++) {
  13.             r[i] = i;
  14.         }
  15.     }
  16.     route(route& c) { // Конструктор копирования
  17.         n = c.n;
  18.         r = new int[c.n];
  19.         for (int i = 0; i < c.n; i++) {
  20.             r[i] = c.r[i];
  21.         }
  22.     }
  23.     route& operator = (const route& rr) {
  24.         if (this != &rr)
  25.         {
  26.             delete[] r;
  27.             n = rr.n;
  28.             r = new int[n];
  29.             for (int i = 0; i < n; i++)
  30.             {
  31.                 r[i] = rr.r[i];
  32.             }
  33.         }
  34.         return *this;
  35.     }
  36.     ~route() { // Деструктор
  37.         if (r != NULL) delete[r];
  38.         r = NULL;
  39.     }
  40.     int route_price(int** P) { // Вычисление стоимости маршрута по матрице стоимости
  41.         if (P == NULL) return -1;
  42.         int i = 0, S = 0;
  43.         for (i = 0; i < n - 1; i++) {
  44.             S = S + P[r[i]][r[i + 1];
  45.         }
  46.         S = S + P[r[i]][r[0]];
  47.         return S;
  48.     }
  49.     bool next_route() { // алгоритм дейкстры
  50.         int i = 0, j = 0;
  51.         for (i = n - 3; i > 0 && !(r[i] > r[i + 1]); i--)
  52.         if (r[i] < r[i + 1]) {
  53.             for(j = n - 2; j > i && !(r[i] < r[j]); j--)
  54.             if(r[i] < r[j]){
  55.                 int temp = r[j];
  56.                 r[j] = r[i];
  57.                 r[i] = temp;
  58.             }
  59.         }
  60.         else return false;
  61.         j = n - i - 2; i = i + 1;
  62.         for (; count < j / 2; i++, count++)
  63.         {
  64.             c = r[i];
  65.             r[i] = r[n - count];
  66.             r[n - count] = c;
  67.         }
  68.         return true;
  69.     }
  70.     friend ostream& operator << (ostream& r, const route& a) {
  71.         for (int i = 0; i < a.n; i++)
  72.             r << a.r[i] << "-";
  73.         r << a.r[0];
  74.         return r;
  75.     }
  76.    
  77. };
  78.  
  79.  
  80.  
  81.  
  82. int main() {
  83.  
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement