【发布时间】:2016-12-04 23:36:40
【问题描述】:
我正在为我正在学习的 C++ 类进行图形实现。到目前为止,这是我想出的:
struct Edge {
int weight;
Vertex *endpoints[2]; // always will have 2 endpoints, since i'm making this undirected
};
struct Vertex {
int data; // or id
list<Edge*> edges;
};
class Graph {
public:
// constructor, destructor, methods, etc.
private:
list<Vertex> vertices;
};
目前有点粗糙,但我想我想知道......我是否缺少一些基本的东西?目前这似乎有点太容易了,通常这意味着我设计错了。
我的想法是,图只是一个顶点列表,它有一个边列表,边将有一个边列表,它有两个顶点端点。
除了我将放入图中的一些函数(例如:最短距离、大小、添加顶点等)之外,我在这些结构/类的基本实现中是否遗漏了一些东西?
【问题讨论】:
-
“现在看起来有点太容易了,通常这意味着我设计错了。”我不同意。特别是当您只是设计一个模板类时,越简单越好。不要忘记 addEdge()、addVertex() 等。当你实现这些时,它可能会让你考虑你的数据是如何表示的。
-
好的,这很好。特别是在这两种方法上,我不能在不添加边的情况下添加顶点(反之亦然),对吧?
-
我注意到您似乎必须先创建所有顶点,然后添加边?
-
视情况而定。通常没有。您可以让
addEdge()检查顶点是否存在,如果不存在,则创建它(当然,这仅在您的顶点在身份下关闭时才有效)。