Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.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++ DFS和BFS工作不正常_C++_Depth First Search_Breadth First Search - Fatal编程技术网

C++ DFS和BFS工作不正常

C++ DFS和BFS工作不正常,c++,depth-first-search,breadth-first-search,C++,Depth First Search,Breadth First Search,你好,我对BFS和DFS有问题。这是我基于互联网上的算法实现的。问题是,在我的例子中,它只移动我开始时使用的顶点,而不改变剩余序列 作为邻接矩阵的图表示 struct vertice { int index; double *arrOfWeights; }; struct Graph { int size; vertice *v; }; DFS算法: void tempDFS(Graph &g, int s, bool visited[]) {

你好,我对BFS和DFS有问题。这是我基于互联网上的算法实现的。问题是,在我的例子中,它只移动我开始时使用的顶点,而不改变剩余序列

作为邻接矩阵的图表示

struct vertice {
    int index;
    double *arrOfWeights;
};

struct Graph {
    int size;
    vertice *v;
};
DFS算法:

   void tempDFS(Graph &g, int s, bool visited[]) {
        visited[s] = true;
        cout << s << ",";
        int i;
        for(i=0; i< g.size; i++)
            if (!visited[i])
                tempDFS(g, i, visited);
    }


    void DFS(Graph &g, int s) {
        bool *visited = new bool[g.size];
        for (int i = 0; i < g.size; i++)
            visited[i] = false;

        tempDFS(g, s, visited);

        cout << endl;
    }
void tempDFS(图形&g、整数s、布尔值[]){
已访问=正确;

cout解决此类问题的正确工具是您的调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该在问题中包含一个重现您的问题的示例,以及您在调试器中所做的观察。您有一个非常奇怪的图形-它有顶点,但没有边(或者更确切地说,你的算法就像每对顶点之间都有边一样工作)。邻接矩阵在哪里?它不在你展示的代码中。总之,“它只移动顶点”是什么意思?什么将顶点移动到哪里?在您显示的代码中,任何地方都没有移动。我猜graph有一个vertice数组,vertice有一个权重数组,所以每个vertice到其他vertice(包括它本身)都有一个权重/距离/边。容易出错的原始数组有错误--请尝试std::vector。给我们一个main,它初始化一个基本图形并实际执行搜索(并告诉我们它应该找到什么答案,以及它找到了什么答案)。此外,拼写也让我感到困扰--单数“顶点”复数“顶点”解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该在问题中包含一个重现您的问题的示例,以及您在调试器中所做的观察。您有一个非常奇怪的图形-它有顶点,但没有边(或者更确切地说,你的算法就像每对顶点之间都有一条边一样)。邻接矩阵在哪里?它不在你展示的代码中。总之,“它只移动顶点”是什么意思?什么将顶点移动到哪里?在您显示的代码中,任何地方都没有移动。我猜graph有一个vertice数组,vertice有一个权重数组,所以每个vertice到其他vertice(包括它本身)都有一个权重/距离/边。容易出错的原始数组有错误--请尝试std::vector。给我们一个main,它初始化一个基本图形并实际执行搜索(并告诉我们它应该找到什么答案,以及它找到了什么答案)。此外,拼写也让我感到困扰--单数“顶点”复数“顶点”
void BFS(Graph &g, int s) {
    bool *visited = new bool[g.size];
    for(int i = 0; i < g.size; i++)
        visited[i] = false;

    queue<int> q;

    visited[s] = true;
    q.push(s);

    while(!q.empty()) {
        s = q.front();
        cout << s << ",";
        q.pop();

        for(int i=0; i<g.size; i++) {
            if(!visited[i]) {
                visited[i] = true;
                q.push(i);
            }
        }
    }
    cout << endl;
}