C++ 在执行DFS时如何记录这两个时间戳而不使用重复?

C++ 在执行DFS时如何记录这两个时间戳而不使用重复?,c++,algorithm,graph,graph-algorithm,depth-first-search,C++,Algorithm,Graph,Graph Algorithm,Depth First Search,在图中执行DFS时,使用两个时间戳跟踪节点何时被访问以及节点的所有邻居何时被访问非常重要。有时我们需要记录两张时间戳。我已经知道如何使用递归来实现它。但我在尝试编写DFS函数时遇到了一些问题,没有重复(例如使用循环和堆栈) 我已经尝试了常用的迭代DFS方法: unsigned int time=0; stack nodeStack=stack(); vector nodeVec=向量(graph.size(),null);//null表示未访问 向量nodeTimeStamp=vector(gr

在图中执行
DFS
时,使用两个时间戳跟踪节点何时被访问以及节点的所有邻居何时被访问非常重要。有时我们需要记录两张时间戳。我已经知道如何使用递归来实现它。但我在尝试编写
DFS
函数时遇到了一些问题,没有重复(例如使用循环和堆栈)

我已经尝试了常用的迭代
DFS
方法:

unsigned int time=0;
stack nodeStack=stack();
vector nodeVec=向量(graph.size(),null);//null表示未访问
向量nodeTimeStamp=vector(graph.size(),对{0,0});
list first timelist=list();
list lastTimeList=list();
布尔=真;
对于(int i=0;i

它不起作用,因为它会在搜索时将一个节点的所有邻居推入堆栈。因此,我们无法记录以这种方式访问一个节点的时间。你能不能帮我一个主意,在执行
DFS
时记录这两个时间戳,而不使用重复性

也许我误解了什么,但当你
pop()
堆栈中的节点时,不会记录时间戳(而不是当你
push()
它们在堆栈上时)在第一个例子中,给你你想要的?很抱歉误解你。我的代码(第二个代码段)是基于第一个代码段的,但失败了。我正在解释为什么您认为第一个代码示例“工作不好”。它执行的是教科书式的DFS,所以感觉你比你想象的更接近于完成这项工作。我编辑了这个问题,使它看起来更清晰。再次抱歉,我的英语不太好。我已经按照你说的编辑了这个问题。谢谢你的建议!