使用vector的dfs实现给出了段错误

时间:2016-07-29 07:23:52

标签: c++ vector depth-first-search

我想在c ++中实现DFS usning stack,但不知怎的,这段代码给了我segfault。我在第一次推入main后使用gdb检查了它的段错误。我错过了什么?

#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;
}

1 个答案:

答案 0 :(得分:2)

您宣布std::vector g

它有0个元素。

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

没有这样的元素。

请参阅cppreference:std::vector::operator[]