2016-07-29 10 views
-2

Ich bin Tring DFS-Using-Stack in C++ zu implementieren, aber irgendwie dieser Code gibt mir segfault. Ich habe überprüft, mit gdb es segfaults nach dem ersten Push in Main. Was fehlt mir?DFS-Implementierung mit Vektor gibt segfault

#include<iostream> 
#include<algorithm> 
#include<vector> 
#include<stack> 
#define MAX_N 5001 
using namespace std; 

vector< vector<int> > g; 
bool visited[MAX_N]; 

void dfs(int start){ 
    stack<int> s; 
    s.push(start); 
    while(!s.empty()){ 
     int current = s.top(); 
     s.pop(); 
     visited[current] = true; 
     cout<<current<<"\n"; 
     for(int i = 0; i < g[current].size() ; ++i){ 
      if(!visited[g[current][i]]){ 
       s.push(g[current][i]); 
       visited[g[current][i]] = true; 
      } 
     } 
    } 
} 

int main() { 
    g[0].push_back(1); 
    g[0].push_back(2); 
    g[2].push_back(3); 
    g[3].push_back(4); 
    dfs(0); 
    return 0; 
} 
+2

Hinweis: Wo Sie setzen Sie 'g' der Größe auf etwas anderes als Null? – Dutow

+1

Größe zuweisen mit der Funktion resize() des Vektors. –

+0

@Dutow ich suchte ich kann nicht herausfinden. Zuerst habe ich g als Vektor von Vektoren deklariert, so dass es als Adjazenzliste verwendet werden kann. Dann dränge ich Elemets dazu. – anekix

Antwort

2

Sie deklarieren eine std::vector g.

Es hat 0 Elemente.

Sie versuchen, auf das erste Element zuzugreifen (g[0]).

Es gibt kein solches Element.

See cppreference: std::vector::operator[]