【问题标题】:DFS of a graph using vector使用向量的图的 DFS
【发布时间】:2020-10-15 11:17:04
【问题描述】:

我想使用向量来实现图形的邻接表表示,并且我正在使用一个旨在使用链表作为指南来实现邻接表的程序,但我无法这样做。这是我到目前为止尝试过的代码:

#include <bits/stdc++.h>
using namespace std;
class graph{
    int v;
    vector<int> *adj;
    void DFSutil(int v, vector<bool> &visited){
        visited[v]=true;
        cout<<v<<" ";
        for(int i=0;i<v;i++){
            if(!visited[i])
                DFSutil(i,visited);
        }
    }
public:
    graph(int v){
        this->v = v;
        vector<int> adj[v];
    }
    void addEdge(int v,int w){
        adj[v].push_back(w);
    }
    void DFS(int source){
        vector<bool> visited;
        DFSutil(source, visited);
    }
};
int main()
{
    graph g(4);
    g.addEdge(0,1);
    g.addEdge(0,2);
    g.addEdge(1,2);
    g.addEdge(2,0);
    g.addEdge(2,3);
    g.addEdge(3,3);
    g.DFS(2);
    return 0;
}

【问题讨论】:

  • 您发布的代码中有几个概念性错误。我建议您在学习图表之前先学习 C++。
  • @TanveerBadar 然后请编辑代码,请不要灰心,我知道你帮不上忙。
  • Stackoverflow 不是让您免费完成作业或从头开始教您编程的地方。详细说明问题所在或使用调试器。

标签: c++ graph c++14


【解决方案1】:

初始化有几个错误:

#include <bits/stdc++.h>
using namespace std;
class graph{
    int v;
    vector<int> *adj;
    void DFSutil(int v, bool visited[]){
        visited[v]=true;
        cout<<v<<" ";
        vector<int>::iterator i;
        for(i=adj[v].begin();i!=adj[v].end();++i){
            if(!visited[*i])
                DFSutil(*i,visited);
        }
    }
public:
    graph(int v){
        this->v = v;
        adj = new vector<int>[v];
    }
    void addEdge(int v,int w){
        adj[v].push_back(w);
    }
    void DFS(int source){
        bool *visited = new bool[source];
        for(int i=0;i<source;i++)
            visited[i]=false;
        DFSutil(source, visited);
    }
};
int main()
{
    graph g(4);
    g.addEdge(0,1);
    g.addEdge(0,2);
    g.addEdge(1,2);
    g.addEdge(2,0);
    g.addEdge(2,3);
    g.addEdge(3,3);
    g.DFS(2);
    return 0;
}

【讨论】:

  • 这里面还有很多概念上的错误。阅读规则 3 和规则 5。以及 RAII。和内存管理。以及为什么包含bits/stdc++.h 不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2018-08-19
  • 2016-01-27
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多