2016-07-29 1 views
-2

C++에서 DFS를 사용하고 있지만이 코드는 segfault를 제공합니다. gdb를 사용하여 main에서 첫 번째 푸시 한 후 segfaults를 검사했습니다. 내가 놓친 게 뭐야?벡터를 사용하여 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

힌트 : 설정하는'0이 아닌 뭔가 g'의 크기? – Dutow

+1

vector의 resize() 함수를 사용하여 g에 크기를 지정하십시오. –

+0

@Dutow 나는 찾을 수 없다. 먼저 내가 벡터를 벡터의 벡터로 선언하여 인접 목록으로 사용할 수있게하고 elemets에 푸시합니다. – anekix

답변

2

std::vector g을 선언하고 있습니다.

요소가 0 개 있습니다.

첫 번째 요소 (g[0])에 액세스하려고합니다.

해당 요소가 없습니다.

참조 cppreference : std::vector::operator[]