【发布时间】:2012-12-09 14:31:55
【问题描述】:
我正在阅读教科书Introduction to Algorithms aka CLRS,我想在c 中使用kruskal 算法实现mst,我想知道的是,我应该使用哪个图形实现,邻接列表或邻接矩阵?我认为在使用邻接列表时对edges 进行排序并不直观,这样定义邻接列表时,邻接列表中edge 的表示会令人困惑:
typedef struct tagAdjList
{
int endPointIndex;
struct tagAdjList * next;
}AdjNode, *AdjList, *AdjPNode;
在对边进行排序时,我想使用指向上面定义的节点的指针数组,问题是上面定义的结构找不到边的start point,而是找到end point。所以我改变了这样的结构:
typedef struct tagAdjList
{
int startPointIndex;
int endPointIndex;
struct tagAdjList * next;
}AdjNode, *AdjList, *AdjPNode;
我想问的是:这样定义邻接表可以吗?还是有更好的做法?或者我应该使用邻接矩阵(因为我看到有些人在搜索互联网时使用矩阵实现 kruskal)?为什么? 对不起英语不好。任何帮助将不胜感激。
【问题讨论】:
标签: c algorithm graph kruskals-algorithm