gpt4 book ai didi

c++ - 列表或指针的问题,图的邻接表示

转载 作者:行者123 更新时间:2023-11-30 04:16:19 27 4
gpt4 key购买 nike

以下代码是图的邻接表表示的开始。
在 main 立即调用的 buildGraph 中,创建了两个顶点,然后在它们之间创建了一条边。但是随后询问顶点的边列表的大小应该返回 1,而不是 0。我已经尝试将 cout 放在不同的地方,但我无法弄清楚问题是什么,但我怀疑这是由于以某种方式误解指针。感谢您的帮助!

#include "MinCut.h"
#include <iostream>
#include <list>

void buildGraph(undirected_graph *);
class vertex;

struct edge
{
vertex * start;
vertex * end;
};

class vertex
{
int vertexNumber;
std::list<edge> edges;
public:
int getVertexNumber(){return vertexNumber;}
std::list<edge> getEdges(){return edges;}
vertex(int n){vertexNumber=n;}
};


class undirected_graph
{
private:
std::list<vertex> graph;

public:
void addVertex(vertex v){graph.push_back(v);}
void createEdge(vertex * v1, vertex * v2);
};


void undirected_graph::createEdge(vertex * v1, vertex * v2)
{
std::list<edge> e1 = v1->getEdges();
std::list<edge> e2 = v2->getEdges();
edge e;
e.start=v1;
e.end=v2;
e1.push_back(e);
e2.push_back(e);
}

int main()
{
undirected_graph myGraph;
buildGraph(&myGraph);
return 0;
}

void buildGraph(undirected_graph * g)
{
vertex v1(1);
vertex v2(2);

g->addVertex(v1);
g->addVertex(v2);
g->createEdge(&v1,&v2);
std::list<edge> e = v1.getEdges();
std::cout<< "? " << e.size();
}

最佳答案

createEdge() 中你有这个:

e.start=v1;
e.start=v2;

应该改为

e.start=v1;
e.end=v2;

编辑:您的问题出在 createEdge 中,e1 和 e2 只是拷贝,因此更改不会影响实际的顶点对象。这是我的解决方案,似乎有效:

像这样向 vertex 添加一个函数:

void addEdge(edge &e){edges.push_back(e);}

然后在 createEdge() 中:

edge e;
e.start=v1;
e.end=v2;
v1->addEdge(e);
v2->addEdge(e);

关于c++ - 列表或指针的问题,图的邻接表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17810806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com