Задать вопрос
@dorifish11

В чем может быть проблема если выдает такую ошибку?

6460c8adea9e7678831825.png
#include<iostream>
#include<vector>
#include <fstream>

using namespace std;
vector<vector<int>> matrix;
vector<int>res;
int def(int a) {
    int x = 0;
    for (int i = 0; i < matrix[a].size(); i++) {
        x += matrix[a][i];
    }
    return x;
}

bool path() {
    int x = 0;
    for (int i = 0; i < matrix.size(); i++) {
        if (def(i) % 2 == 1) {
            x++;
        }
    }
    if (x == 2) {
        return true;
    }
    return false;
}

int start() {
    int x = 0;
    for (int i = 0; i < matrix.size(); i++) {
        if (def(i) % 2 == 1) {
            x = i;

        }
    }
    return x;
}

bool cycle() {
    for (int i = 0; i < matrix.size(); i++) {
        if (def(i) % 2 == 1) {
            return false;
        }
    }
    return true;
}

bool sum() {
    for (int i = 0; i < matrix.size(); i++) {
        for (int j = 0; j < matrix[i].size(); j++) {
            if (matrix[i][j] > 0) {
                return false;
            }
        }
    }
    return true;
}

void artist() {

    for (int i = start(); !sum();) {
        int max = 0;
        int I = 0;
        for (int j = 0; j < matrix[i].size(); j++) {
            if (max <= matrix[i][j]) {
                if (i == j) {
                    for (int J = 0; matrix[i][j] > 0; matrix[i][j]--) {
                        res.push_back(j + 1);
                    }
                }
                else
                {
                    max = matrix[i][j];
                    I = j;
                }
            }
        }
        res.push_back(I + 1);
        matrix[i][I]--;
        matrix[I][i]--;
        i = I;
    }
}

int main() {
    system("chcp 1251");
    system("cls");
    ifstream fin("graph.txt");
    int V, E;
    if (fin.is_open()) {
        fin >> V >> E;
        for (int i = 0; i < V; i++) {
            vector<int> a;
            for (int j = 0; j < V; j++) {
                a.push_back(0);
            }
            matrix.push_back(a);
        }
        for (int i = 0; i < E; i++) {
            int v, u, k;
            fin >> v >> u >> k;
            v--; u--;
            matrix[v][u] = k;
            matrix[u][v] = k;
        }
        fin.close();
    }
    else {
        cout << "Помилка відкриття файла!\n";
        return 0;
    }
    if (!path() && !cycle()) {
        cout << "В мультиграфі немає ні циклу ні шляху Ейлера" << endl;
        return 0;
    }
    else if (!path())
    {
        cout << "Цикл Ейлера" << endl;
    }
    else if (!cycle())
    {
        cout << "Шлях Ейлера" << endl;
    }
    cout << start() + 1 << " ";
    artist();

    for (int j = 0; j < res.size(); j++) {
        cout << res[j] << " ";
    }
    return 0;
}
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@a1nsworth
Смотрите, эта ошибка с чем-то схожа с out of range , чтобы это доказать , попробуйте вместо обращение к элементу через [index], сделать через метод .at(index) , т.к данный метод выбрасывает исключение в случае, когда данный индекс выходит за границы. Как замените, покажите результат.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Нужно проверить все обращения к векторам

vector<vector<int>> matrix;
vector<int>res;


по индексу. Используется больше элементов чем выделено.

Автор и не жди решения на блюдечке. Давай начинай все проверять. Тестирование - это тоже активность разработчика и никто ее за тебя не сделает.

P.S. Странно что за 30 лет С++ std так и не обзавелся типом "матрица". Бедняги разработчики до сих пор используют вложенные вектора. Или зубчатые вектора.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы