@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;
}
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 2
@a1nsworth
Смотрите, эта ошибка с чем-то схожа с out of range , чтобы это доказать , попробуйте вместо обращение к элементу через [index], сделать через метод .at(index) , т.к данный метод выбрасывает исключение в случае, когда данный индекс выходит за границы. Как замените, покажите результат.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Нужно проверить все обращения к векторам

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


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

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

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

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

Войти через центр авторизации
Похожие вопросы