2

是否可以在 C 中创建数组数组?更具体地说,是否可以制作邻接列表(数组)的列表(数组)?

如果是这样,怎么办?

我的教科书使用了 Dijkstra 算法(以及许多其他算法)的邻接列表列表,而不是使用邻接矩阵,尽管这本书是伪代码,即使这样,它也没有任何关于如何实现列表的参考......

据推测,在许多算法中,邻接列表列表比邻接矩阵更有效。我想过使用链表,但是 AFAIK 它与使用邻接矩阵相同,因此以这种方式实现它根本没有意义......

4

3 回答 3

4

你的意思是多维数组吗?

int mdarr[10][20];
于 2013-03-09T07:09:48.400 回答
3

是否可以在 C 中创建数组数组?

是的。

更具体地说,是否可以制作邻接列表(数组)的列表(数组)?

是的,它可以使用链表的链表(或您的情况下的数组)来实现。

如果是这样,怎么办?

一个列表(或数组)可以维护节点,每个节点都将指向实际的邻接列表,并包含有关图形当前点的信息。这可以通过创建一个struct相关数据来实现(一个信息字段和一个下一个指针,以及一个指向邻接列表的指针)

第二个列表将是每个节点的实际邻接列表。它将由第一个列表的相应节点指向。它将包含节点,每个节点都是连接到初始列表中相应点的图形点。它可以类似地实现,通过创建一个struct具有相关数据(一个字段用于下一个指针,一个信息字段)。

这不是一个多维数组,而是完全不同的。如果您的图是稀疏的,这将比邻接矩阵使用更少的空间。

举个例子,让A, B, C,D是一个无向图的节点,A它连接到BC

然后列表将是这样的:

A -> B -> C -> D
|    |    |
B    A    A
|
C
于 2013-03-09T07:21:09.913 回答
0

你的意思是一个三维数组?

你定义一个像这样的 aMat[3][3] 的邻接矩阵(三个元素的图)。

因此,您可以定义例如 4 个由三个元素组成的图,每个图如下所示:aMatMulti[4][3][3]。

于 2013-03-09T08:02:05.557 回答