как исправить ошибку: Vector subscript out of range

void BFS(vector<vector<int>> matrix)
{
    vector<int> temp;
    print_matrix(matrix);
    queue<int> Q;
    int am = matrix.size();
    int* visited = new int[am];
    for (int i = 0; i < am; i++)visited[i] = 0;
    int unit = 0;
    visited[unit] = 1;
    Q.push(unit);
    for (int a = 0; !Q.empty(); a++)
    {
 
        unit = Q.front();
        temp.push_back(unit);
        Q.pop();
        show_queue(Q);
        for (int i = 0; i < matrix.size(); i++)
            if (matrix[unit][i] && !visited[i])-Необработанное исключение по адресу 0x7B04FC66 (ucrtbased.dll) в Project1.exe: Недопустимый параметр был передан функции, для которой недопустимые параметры вызывают неустранимую ошибку.
 
            {
                Q.push(i);
                visited[i] = 1;
                show_queue(Q);
            }
    }cout << endl;
    for (int i = 0; i < temp.size(); i++)
    {
        cout << temp[i] << " ";
    }cout << endl;
    delete[]visited;
}

0 1 0 0 0 0 0 0 0 1 0
1 0 1 0 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0 0 0 0
0 0 0 0 1 1 0 1 0 0 0
0 0 1 1 0 1 0 0 0 0 0
0 0 0 1 1 0 1 0 0 0 1
0 0 0 0 0 1 0 0 1 0 0
0 0 0 1 0 0 0 0 1 0 0
0 0 0 0 0 0 1 1 0 0 0
1 0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0 0 1 0


Ответы (1 шт):

Автор решения: Harry

Исходим из вашей картинки.

Итак, матрица НЕ квадратная, а 13 строк и 11 столбцов. То, что я и намекал в комментарии...

Итак,

for (int i = 0; i < matrix.size(); i++)
     if (matrix[unit][i] && !visited[i])

Чему равен matrix.size()? Это число строк - 13.

Значит, вы обращаетесь к 13 элементам вектора matrix[unit]. А их всего 11.

Выход за границы диапазона, о чем вам и доложили...

Количество столбцов в строке matrix[unit] - не matrix.size(), а вовсе даже matrix[unit].size()...

Хотя как вы для графа используете не квадратную матрицу - мне непонятно...

→ Ссылка