При запуске программы в codeblocks программа вылетает. Может проблема в двумерном динамическом массиве? Что я делаю не так? Помогите исправить ошибку
//Поиск в ширину
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int next (int i, int cur, int **A, int N) //функция получения индекса следующей после cur смежной вершины для вершины i
{
cur++;
while (cur<N && !A[i][cur]) cur++;
if (cur<N) return cur;
return -1; //если смежных больше нет, возвращаем признак отсутствия
}
void BFS (int a, int P[], int **A, int N)
{
int x, y, queue[N], beg = 0, end=-1;
queue[++end] = a; /* помещаем вершину в очередь */
P[a] = 1; /* помечаем ее посещенной */
while (beg <= end) /* пока очередь не пустa */
{
x = queue[beg++]; /* берем элемент из очереди */
y = -1;
do
{
y = next (x, y, A, N); /* находим смежную с данной вершину */
if (y != -1 && !P[y]) /* если есть смежная и она новая */
{
queue[++end] = y; /* помещаем ее в очередь */
P[y] = 1; /* помечаем ее посещенной */
}
}
while (y != -1); /* пока не переберем все смежные с х вершины */
}
}
int main()
{
setlocale(LC_ALL, "Rus");
int N, x, q, i, s = 0, j = 0;
bool t = 0;
string str;
ifstream f;
f.open("myfile.txt");
if (!f.is_open()){
cout<<"Ошибка открытия файла"<<endl;
return 1;
}
else{
cout<<"Файл открыт"<<endl;
getline(f, str);
N = str[0] - '0';
}
int **A = new int*[N];
for (i = 0; i < N; i++)
A[i] = new int[N];
int P[N]={};
while (getline(f, str)){
cout <<endl<<str<< endl;
for (i = 0; str[i]!='\0'; i++){
if (str[i]!=' '){
A[j][i] = str[i] - '0';
cout<<"pp="<<A[j][i]<<" ";
}
}
cout<<endl<<"j = "<<j<<endl;
j++;
}
f.close();
BFS(0, P, A, N);
for (q=0; q<N; q++){
for (x=0, s=0; x<N; x++)
if (P[x] == 1) s++;
if (s == N){
cout<<"Остовное дерево существует"<<endl;
t = 1;
break;
}
if (P[q]==0) BFS(x, P, A, N); //если есть непосещенные вершины, запускаем поиск
}
if (!t) cout<<"Остовное дерево не существует"<<endl;
for (i = 0; i < N; i++)
delete[] A[i];
system("pause");
return 0;
}
Источник: Stack Overflow на русском