程序正常编译,调试器指向此函数(第三行):
#include <cstdlib>
#include <vector>
#include <iterator>
using namespace std;
vector < vector <int> > g = {{0,1,1},
{1,0,0},
{1,0,0}};
vector < char > used;
void dfs (int v) {
used[v] = true;
for (vector<int>::iterator i = g[v].begin(); i!=g[v].end(); i++)
if (!used[*i])
dfs (*i);
}
int main(int argc, char** argv) {
dfs(1);
return 0;
}
退出,返回码为1
答案 0 :(得分:4)
写作时
vector <char> used;
您正在创建一个空向量,因此访问它的任何元素都将调用未定义的行为(程序可能崩溃,继续执行任何操作)。
考虑类似
vector <char> used(2, 0);
在这里创建两个初始化为0的元素。
第二,鉴于C ++具有bool
作为类型,您可能要考虑使用vector<bool>
。这种类型有问题,但就您而言,似乎很合适,请查看https://isocpp.org/blog/2012/11/on-vectorbool