如何解决使用向量的图的DFS
我想使用向量实现图的邻接表表示,并且我正在使用一个程序,该程序旨在使用链表作为指导来实现邻接表,但我无法做到这一点。到目前为止,这是我尝试过的代码:
#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;
}
解决方法
初始化时出现一些错误:
#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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。