Witam, mianowicie mam problem z moją implementacją algorytmu DFS, program zawiesza się przy próbie odczytania wielkości listy sąsiedztwa i wyskakuje mi następujący błąd w programie Visual Studio:
Zgłoszono wyjątek: naruszenie dostępu do odczytu.
std::_Vector_alloc<std::_Vec_base_types<int,std::allocator<int> > >::_Mylast(...) zwrócił 0x8.
Myślę że mój błąd wynika z tego jak zadeklarowałem swoją listę sąsiedztwa, niestety przy moim aktualnym poziomie nie jestem w stanie stwierdzić gdzie dokładnie leży błąd i jak go naprawić.
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
int N, M;
vector<int> *ls;
bool *visited = new bool[N];
void DFS(int v){
visited[v]=true;
cout<<v<<endl;
int i;
for(i=0;i<ls[v].size();i++){
int u=ls[v][i];
if(visited[u]==false){
DFS(u);
}
}
}
int main(){
cout<<"Podaj kolejno ilosc wierzcholkow twojego grafu oraz ilosc krawedzi: "<<endl;
cin>>N;
cin>>M;
vector<int> *ls = new vector<int>[N];
cout<<"Podaj krawedzie w formacie w1 w2 np. 1 5 "<<endl;
for(int i=0; i<M; i++){ // Lista sasiedztwa - ls
int w1, w2;
cin>>w1;
cin>>w2;
ls[w1].push_back(w2);
}
cout<<"Listy sasiedztwa :"<<endl;
for(int i=0; i<N; i++){
cout<<"Sasiadem "<<i<<" jest: ";
if(ls[i].size()==0) cout<<"nikt";
for(int j=0; j<ls[i].size(); j++){
cout<<ls[i][j]<<" ";
}
cout<<endl;
}
for(int i=0;i<N; i++){
visited[i]=0;
}
DFS(0);
delete [] ls;
return 0;
}
Do testowania swojego programu wklejałem następujące dane:
6 8
0 1
1 0
1 1
0 3
3 1
4 0
5 4
3 4