2016-07-29 2 views
-2

DFSをC++で使用するように実装していますが、何とかこのコードでsegfaultが得られます。私はgdbを使って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

ヒント:あなたは、ゼロ以外の何かに 'G'のサイズを設定するのですか? – Dutow

+1

ベクトルのサイズ変更()関数を使用してgにサイズを割り当てます。 –

+0

@Dutow私は見つけることができません。まず、ベクトルをベクトルのベクトルとして宣言し、隣接リストとして使用できるようにしてから、elemetsにプッシュします。 – anekix

答えて

2

あなたはstd::vector gと宣言しています。

0要素があります。

最初の要素(g[0])にアクセスしようとしています。

このような要素はありません。

参照くださいcppreference:std::vector::operator[]

関連する問題