我正在阅读《算法导论》这本教材,也被称为CLRS
,我想用C语言实现使用Kruskal
算法的mst
,我想知道应该使用哪种图形实现,邻接表还是邻接矩阵?我认为在使用邻接表时对edges
进行排序不直观,在定义邻接表时edge
的表示方法令人困惑,如下所示:
typedef struct tagAdjList
{
int endPointIndex;
struct tagAdjList * next;
}AdjNode, *AdjList, *AdjPNode;
在对边进行排序时,我希望使用一个指向上述节点的指针数组,但问题是上述定义的结构体无法找到边的起始点
,只能找到终止点
。因此,我将结构体更改为以下形式:
typedef struct tagAdjList
{
int startPointIndex;
int endPointIndex;
struct tagAdjList * next;
}AdjNode, *AdjList, *AdjPNode;
我想问的是:这样定义邻接表可以吗?还有更好的实践方法吗?或者我应该使用邻接矩阵(因为我在网上看到一些人在搜索时使用矩阵实现克鲁斯卡尔算法)?为什么?抱歉我的英语不太好,感谢您的帮助。