как исправить ошибку: 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 шт):
Исходим из вашей картинки.
Итак, матрица НЕ квадратная, а 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()...
Хотя как вы для графа используете не квадратную матрицу - мне непонятно...