2016-07-29 52 views
-2

我打算在C++中实现DFS使用堆栈,但不知何故此代码给我段错误。在首次推入main后,我使用gdb检查了它的segfaults。我错过了什么?使用向量的dfs实现给出段错误

#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

使用vector的resize()函数将大小赋值给g。 –

+0

@Dutow我搜索了我找不到。首先我宣布g作为矢量矢量,以便它可以用作邻接列表,然后我将元素推向它 – anekix

回答

2

您声明的是std::vector g

它有0个元素。

您正试图访问其第一个元素(g[0])。

没有这样的元素。

见cppreference:std::vector::operator[]