据我所知,我们创建了一个链表的数组,用数组的索引表示每个顶点。但是我们如何存储与每个顶点相关的实际数据呢?例如,如果我有一个包含顶点的有向图:1。John 2. Mary 3. Sunny,和edge(John,Mary)和(Mary,Sunny),我们可以用通常的方式创建一个邻接列表( 1,2)和(2,3)作为边缘。但是我们在哪里存储与1,2和3相关的名称?
我做了什么?
我创建了一个类'vertexnode',它存储了一个名称和指向'edgenode'类对象的指针。然后我创建了一个包含类'vertexnode'的对象的数组。 'edgenode'类包含1)此数组的索引,其中索引表示边的第二个端点,以及2)指向'edgenode'的下一个对象的指针。然后我将顶点(名称)和边(名称对)添加到图形中。该程序运行正常。
我想知道这是否是一种有效的方法,或者最好将名称分别存储在数组中,还是有其他方法?基本上,我想知道它是如何以传统方式完成的?
PS:请避免在答案中使用STL或Boost或类似内容。我是图表的新手,我想知道基本级别的工作原理,而不是某些功能已经煮熟了我们的食谱。提前谢谢。
答案 0 :(得分:1)
我认为你这个案子有太多的课程,不知道这是不是最好的方法,但我会选择一个班级:
Vertex
{
string name;
List<Vertex> adjacent;
}
通过这种方式,您可以知道哪个顶点链接到哪个顶点,并且您只有一个类来存储所有内容。
但我会说最好的方法是适合您需求的方法,这取决于您对图表的处理方式