是否可以在 C 中创建数组数组?更具体地说,是否可以制作邻接列表(数组)的列表(数组)?
如果是这样,怎么办?
我的教科书使用了 Dijkstra 算法(以及许多其他算法)的邻接列表列表,而不是使用邻接矩阵,尽管这本书是伪代码,即使这样,它也没有任何关于如何实现列表的参考......
据推测,在许多算法中,邻接列表列表比邻接矩阵更有效。我想过使用链表,但是 AFAIK 它与使用邻接矩阵相同,因此以这种方式实现它根本没有意义......
是否可以在 C 中创建数组数组?更具体地说,是否可以制作邻接列表(数组)的列表(数组)?
如果是这样,怎么办?
我的教科书使用了 Dijkstra 算法(以及许多其他算法)的邻接列表列表,而不是使用邻接矩阵,尽管这本书是伪代码,即使这样,它也没有任何关于如何实现列表的参考......
据推测,在许多算法中,邻接列表列表比邻接矩阵更有效。我想过使用链表,但是 AFAIK 它与使用邻接矩阵相同,因此以这种方式实现它根本没有意义......
你的意思是多维数组吗?
int mdarr[10][20];
是否可以在 C 中创建数组数组?
是的。
更具体地说,是否可以制作邻接列表(数组)的列表(数组)?
是的,它可以使用链表的链表(或您的情况下的数组)来实现。
如果是这样,怎么办?
一个列表(或数组)可以维护节点,每个节点都将指向实际的邻接列表,并包含有关图形当前点的信息。这可以通过创建一个struct
相关数据来实现(一个信息字段和一个下一个指针,以及一个指向邻接列表的指针)
第二个列表将是每个节点的实际邻接列表。它将由第一个列表的相应节点指向。它将包含节点,每个节点都是连接到初始列表中相应点的图形点。它可以类似地实现,通过创建一个struct
具有相关数据(一个字段用于下一个指针,一个信息字段)。
这不是一个多维数组,而是完全不同的。如果您的图是稀疏的,这将比邻接矩阵使用更少的空间。
举个例子,让A
, B
, C
,D
是一个无向图的节点,A
它连接到B
和C
。
然后列表将是这样的:
A -> B -> C -> D
| | |
B A A
|
C
你的意思是一个三维数组?
你定义一个像这样的 aMat[3][3] 的邻接矩阵(三个元素的图)。
因此,您可以定义例如 4 个由三个元素组成的图,每个图如下所示:aMatMulti[4][3][3]。