【发布时间】:2023-03-10 00:05:02
【问题描述】:
我在一个问题中使用了dfs,但直到现在我还没有在主程序中调用dfs,我的程序正在崩溃。最近我在c 编程,现在我切换到cpp。所以我是cpp 的新手。
我知道我在向量中做错了什么,请告诉我可以改进什么。 我知道向量可以自动增加那里的大小。
#include<iostream>
#include<vector>
using namespace std;
const int MAX = 100000;
bool visited[MAX] = { 0 };
int intime[MAX];
int outtime[MAX];
int timer = 0;
void dfs(vector<vector<int>> graph, int v)
{
visited[v] = true;
timer++;
intime[v] = timer;
vector<int>::iterator it = graph[v].begin();
while (it != graph[v].end()) {
if (visited[*it] == false)
{
dfs(graph, *it);
}
it++;
}
++timer;
outtime[v] = timer;
}
int main()
{
vector<vector<int>> graph;
graph[1].push_back(2);
graph[1].push_back(3);
graph[3].push_back(6);
graph[2].push_back(4);
graph[2].push_back(5);
graph[5].push_back(7);
graph[5].push_back(8);
graph[5].push_back(9);
system("pause");
}
【问题讨论】:
-
graph[1]aftervector<vector<int>> graph;是未定义的行为,由于不存在元素访问。 -
我声明一个二维向量
-
即vector的vector
-
@humblefool 您正在声明一个空的二维向量,然后访问不存在的元素。
-
@humblefool "这里的行大小无所谓,可以根据需要扩展" 仅当使用
push_back、emplace_back或resize时。考虑重新阅读std::vector::operator[]的文档。
标签: c++ algorithm c++11 data-structures stdvector