Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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++ 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,您这一次

这里的Dfs在遍历节点时可以完美运行,但在返回时,它会在最后一个节点之前停止,我的程序也会停止。 前 考虑图1—2>3>4>0>1。 当遍历其精细但返回时将在顶点3处停止
实际上,我也在图和拓扑排序中实现循环。但是它们都不起作用,我也不知道为什么。

请做一个测试,并报告您在调试过程中发现的事情。在
void dfs(有向图g,int s)
中,您复制了有向图,它只复制了member
vector*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);
    }
}