C++ 我的DFS代码有什么问题?

C++ What's wrong with my DFS code?

本文关键字:什么 问题 代码 我的 DFS C++      更新时间:2023-10-16

我已经尝试按照CLRS中给出的方式对DFS算法进行编码。这是下面的代码。当我运行它时,我得到了一个错误,"你的程序意外停止。"当我调试代码时,我在调用堆栈"msvcrt!malloc()"answers"operator new(unsigned int)"中得到了这一行。我正在使用CodeBlocks。我哪里错了?

#include<iostream>
#include<cstdlib>
#include<vector>
#include<list>
#include<utility>
#include<algorithm>
#include<string>
using namespace std;
struct prop
{
    int p;
    int value;
    int d;
    int f;
    string color;
};
vector<prop>v;
prop make_prop(int a,int b,int c,int d,string e)
{
    prop p = {a,b,c,d,e};
    return p;
}
class Dfs
{
public:
    int time;
    vector<list<int> >adj;
    Dfs(int nv)
    {
        v.resize(nv);
        adj.resize(nv);
        for(int i=0;i<nv;i++)
        {
            v[i].value = i;
            v[i].p = -1;
            v[i].color = "WHITE";
        }
    }
    void addinput()
    {
        adj[0].push_back(1);
        adj[0].push_back(2);
        adj[0].push_back(3);
        adj[1].push_back(0);
        adj[1].push_back(3);
        adj[2].push_back(0);
        adj[2].push_back(3);
        adj[3].push_back(0);
        adj[3].push_back(1);
        adj[3].push_back(2);
    }
    void dfs();
    void dfsvisit(prop);
};
void Dfs::dfs()
{
    time = 0;
    for(int i=0;i<v.size();i++)
    {
        if(v[i].color == "WHITE")
        {
            dfsvisit(v[i]);
        }
    }
}
void Dfs::dfsvisit(prop m)
{
    time++;
    m.d = time;
    m.color = "GRAY";
    int val = m.value;
    for(auto it = adj[val].begin();it != adj[val].end();it++)
    {
        if(v[*it].color == "WHITE")
        {
            v[*it].p = val;
            dfsvisit(v[*it]);
        }
    }
    m.color = "BLACK";
    cout<<m.value;
    time++;
    m.f = time;
}
int main()
{
    Dfs d(4);
    d.addinput();
    d.dfs();
    return 0;
}
void Dfs::dfsvisit(prop m) // should be prop&

dfsvisit(prop m)将在dfsvisit(prop& m)接收引用时复制属性,直接处理传递给函数

的属性

堆栈将溢出!在函数dfsvisite中,您可以逐值传递参数,这永远不会改变实际参数。您应该通过引用传递参数。

void dfsvisit(prop& m);