2016-07-29 4 views
-2

Я пытаюсь реализовать стоп-стоп DFS в C++, но каким-то образом этот код дает мне segfault. Я проверил с помощью gdb это segfaults после первого нажатия на main. Что мне не хватает?реализация dfs с использованием вектора дает 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

Подсказка: Если вы установите 'размер G' на что-то другое, чем ноль? – Dutow

+1

Назначьте размер g, используя функцию resize() вектора. –

+0

@ Dutow я искал, я не могу узнать. сначала я объявил g вектором векторов, чтобы его можно было использовать как список смежности, тогда я нажимаю на него элементы – anekix

ответ

2

Вы объявляете std::vector g.

Он имеет 0 элементов.

Вы пытаетесь получить доступ к своему 1-му элементу (g[0]).

Нет такого элемента.

См cppreference: std::vector::operator[]