gpt4 book ai didi

c++ - DFS 只返回一个元素

转载 作者:行者123 更新时间:2023-11-28 08:15:57 25 4
gpt4 key购买 nike

这里是 DFS 算法,它只返回一个顶点,而不是 ABCDE

#include <iostream>
using namespace std;

class Stack
{

private:
static const int size=20;
int *st;
int top;
public :
Stack(){
st =new int[size];
top=-1;

}
~Stack(){
delete[] st;
top=-1;
}
void push(int j){
st[++top]=j;
}
int pop(){
return st[top--];
}
int peek(){

return st[top];

}
bool empthy(){
return (top==-1);

}
};
class Vertex{
public:
char label;
bool visited;
public:
Vertex(){

}
Vertex(char lab){
label=lab;
visited=false;

}
};
class Graph{
private:
static const int maxvertex=20;
Vertex* vertexlist;
int **adj;
int nverts;
Stack *sstack;
public:
Graph(){
vertexlist=new Vertex[maxvertex];
adj=new int*[maxvertex];
for (int i=0;i<20;i++)
adj[i]=new int[maxvertex];
nverts=0;
for (int i=0;i<maxvertex;i++){
for (int j=0;j<maxvertex;j++){
adj[i][j]=0;
}
}

sstack=new Stack();
}
void add(char lab){

vertexlist[nverts++] = Vertex(lab);
}
void addedge(int i,int j){
adj[i][j]=1;
adj[j][i]=1;


}
void display(int v){
cout<<vertexlist[v].label<<endl;

}
int getadjacent(int v){

for (int j=0;j<nverts;j++){
if (adj[v][j]==1 && vertexlist[j].visited==1){
return j;
}


}
return -1;
}
void dfs(){
vertexlist[0].visited=true;//mark it
display(0);
sstack->push(0);
while(!sstack->empthy()){
int v=getadjacent(sstack->peek());
if (v==-1){ sstack->pop();}
else{
vertexlist[v].visited=true;
display(v);
sstack->push(v);
}
}


for (int j=0;j<nverts;j++){

vertexlist[j].visited=false;
}



}



};
int main(){

Graph *graph=new Graph();
graph->add('A');
graph->add('B');
graph->add('C');
graph->add('D');
graph->add('E');
graph->addedge(0,1);
graph->addedge(1,2);
graph->addedge(0,3);
graph->addedge(3,4);
cout<<" visits : ";
graph->dfs();
delete []graph;







return 0;
}

它返回 A,我的代码有什么问题?请帮助我

最佳答案

您的代码存在一些问题(例如,不要对使用 new 创建的对象使用 delete[],它不是数组)。

但问题似乎是你的相邻定义需要vertexlist[j].visited==1,但我认为你的意图是寻找未访问的节点。所以你找不到任何与“A”相邻的节点,因为它们都还没有被访问过。

关于c++ - DFS 只返回一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7783965/

25 4 0
文章推荐: php - 我可以在 Swift 的 header 中使用 token 来授权数据库连接吗?
文章推荐: html - 带填充的事件类 Bootstrap 菜单
文章推荐: ios - 如何使两个具有自动布局的标签具有相同的文本大小?
文章推荐: Javascript:jQuery 帮助从附加到新函数中获取
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com