Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- class route {
- int* r, n;
- public:
- route(int nn) { // Конструктор
- n = nn;
- r = new int[nn];
- for (int i = 0; i < nn; i++) {
- r[i] = i;
- }
- }
- route(route& c) { // Конструктор копирования
- n = c.n;
- r = new int[c.n];
- for (int i = 0; i < c.n; i++) {
- r[i] = c.r[i];
- }
- }
- route& operator = (const route& rr) {
- if (this != &rr)
- {
- delete[] r;
- n = rr.n;
- r = new int[n];
- for (int i = 0; i < n; i++)
- {
- r[i] = rr.r[i];
- }
- }
- return *this;
- }
- ~route() { // Деструктор
- if (r != NULL) delete[r];
- r = NULL;
- }
- int route_price(int** P) { // Вычисление стоимости маршрута по матрице стоимости
- if (P == NULL) return -1;
- int i = 0, S = 0;
- for (i = 0; i < n - 1; i++) {
- S = S + P[r[i]][r[i + 1];
- }
- S = S + P[r[i]][r[0]];
- return S;
- }
- bool next_route() { // алгоритм дейкстры
- int i = 0, j = 0;
- for (i = n - 3; i > 0 && !(r[i] > r[i + 1]); i--)
- if (r[i] < r[i + 1]) {
- for(j = n - 2; j > i && !(r[i] < r[j]); j--)
- if(r[i] < r[j]){
- int temp = r[j];
- r[j] = r[i];
- r[i] = temp;
- }
- }
- else return false;
- j = n - i - 2; i = i + 1;
- for (; count < j / 2; i++, count++)
- {
- c = r[i];
- r[i] = r[n - count];
- r[n - count] = c;
- }
- return true;
- }
- friend ostream& operator << (ostream& r, const route& a) {
- for (int i = 0; i < a.n; i++)
- r << a.r[i] << "-";
- r << a.r[0];
- return r;
- }
- };
- int main() {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement