C++ Can';t在深度优先搜索(dfs)中执行运行时错误。函数停止返回 使用名称空间std; 布尔*标记; //图形API 类有向图 { INTV; 向量*adj; INTE; 公众: 有向图(intv) { e=0; v=v; adj=新向量[v]; } 无效补遗(整数v,整数w) { 形容词[v]。推回(w); e++; } int V() { 返回v; } 向量邻接(int i) { 返回;返回;返回; } }; //API结束 //这就是问题所在 void dfs(有向图g,int-s) { 标记为[s]=true; 用于(内部w:g.相邻) { 如果(!标记为[w]) dfs(g,w); } }
这里的Dfs在遍历节点时可以完美运行,但在返回时,它会在最后一个节点之前停止,我的程序也会停止。 前 考虑图1—2>3>4>0>1。 当遍历其精细但返回时将在顶点3处停止C++ Can';t在深度优先搜索(dfs)中执行运行时错误。函数停止返回 使用名称空间std; 布尔*标记; //图形API 类有向图 { INTV; 向量*adj; INTE; 公众: 有向图(intv) { e=0; v=v; adj=新向量[v]; } 无效补遗(整数v,整数w) { 形容词[v]。推回(w); e++; } int V() { 返回v; } 向量邻接(int i) { 返回;返回;返回; } }; //API结束 //这就是问题所在 void dfs(有向图g,int-s) { 标记为[s]=true; 用于(内部w:g.相邻) { 如果(!标记为[w]) dfs(g,w); } },c++,c++14,C++,C++14,这里的Dfs在遍历节点时可以完美运行,但在返回时,它会在最后一个节点之前停止,我的程序也会停止。 前 考虑图1—2>3>4>0>1。 当遍历其精细但返回时将在顶点3处停止 实际上,我也在图和拓扑排序中实现循环。但是它们都不起作用,我也不知道为什么。请做一个测试,并报告您在调试过程中发现的事情。在void dfs(有向图g,int s)中,您复制了有向图,它只复制了membervector*adj这可能是问题的根源。而是使用std::vector adj用于您的多数组。Thnak you,您这一次
实际上,我也在图和拓扑排序中实现循环。但是它们都不起作用,我也不知道为什么。请做一个测试,并报告您在调试过程中发现的事情。在
void dfs(有向图g,int s)
中,您复制了有向图,它只复制了membervector*adj代码>这可能是问题的根源。而是使用std::vector adj代码>用于您的多数组。Thnak you,您这一次我遇到了问题,这是由于类中的析构函数在第一次返回后删除了adj
。复制构造函数解决了我的问题
using namespace std;
bool *marked;
//graph API
class Digraph
{
int v;
vector<int>* adj;
int e;
public:
Digraph(int V)
{
e=0;
v=V;
adj=new vector<int>[v];
}
void addEdge(int v,int w)
{
adj[v].push_back(w);
e++;
}
int V()
{
return v;
}
vector<int> adjacent(int i)
{
return adj[i];
}
};
//API ends
//this is the problem
void dfs(Digraph g,int s)
{
marked[s]=true;
for(int w:g.adjacent(s))
{
if(!marked[w])
dfs(g,w);
}
}