2001 年
第三期
赣 南 师 范 学 院 学 报
Journal of Gannan T eachers College
No. 3
June. 2001
最小生成树问题的 Kruscal 算法的
一种实现方法
刘 洋, 杨素华
( 赣南师范学院 数学与计算机系, 江西 赣州 341000)
摘 要: 本文讨论了针对带权 连通图的 一种可 行性存 储结构 单 链表结 构的 构造 问题, 并
研究了在该结构上构造最小生成树的算法. 算法 已在机器上得到了实现.
关键词: 最小生成树; 算法; 带权连通图; 单链表结构
中图分类号: T Q 58 文献标识码: A 文章编号: 1004- 8332( 2001) 03- 0063- 04
1 引言
最小生成树问题是带权连通图[ 下简称为连通图] 的一个很重要的应用, 在解决最优( 最
小) 代价类问题上用途广泛. 如何构造最小生成树?
[ 1]
中作了较详细的讨论, 并给出了构造最
小生成树的两个著名算法: Prim 算法和 Kruscal 算法, 其中 Kruscal 算法只给出了算法思想. 这
两个算法均利用了一个被称作为 MST 的性质. 同时,
[ 1]
中还介绍了普通图的几种常用的存储
结构. 本文以另一种结构 单链表结构作为连通图的存储结构, 并在该结构上利用 Kruscal
算法思想实现了最小生成树的生成算法.
2 连通图的单链表结构的构造
2. 1 单链表结构结点的定义
为了将图的信息反映在单链表结构上, 我们对链表上的结点结构定义如下:
# define V ex type char / * 定义连通图中顶点类型* /
# define V Rtype int / * 定义连通图中边的权值类型* /
typedef struct Vex
_
Edge{ / * 表示边顶点的结点结构定义* /
Vextype f irstdata; / * 构成边的一个顶点* /
VR type edgecost; / * 边的权值* /
Vextype enddata; / * 构成边的另一个顶点* /
struct V ex
_
Edge * nex tvex
_
edge; / * 指向下一个边顶点结点的指针* /
} VEX
_
EDGE;
VEX
_
EDGE * Vexedgeh, * Theadn; / * 定义指向边顶点结构的指针变量* /
称这样定义的结点为边顶点结点, 能够表示连通图中的边和顶点的信息. 考虑到操作的方
便, 顶点类型使用字符型, 边的权值类型使用整型, 相同的边不重计入( 即同一条边的两个顶点
不考虑顺序) . 另外, 还定义了一个头结点:
typedef struct HEADN ODE{ / * 头结点结构定义* /
int num ; / * 连通图中的顶点数* /
VEX
_
EDGE * firstvex
_
edge; / * 指向第一条边顶点结点的指针* / } HEAD;
HEAD * Ghead; / * 定义指向头结点的指针变量* /
图 1 在上述结构定义下的存储结构可用图 2 表示。
这样, 有 m 条边的连通图就可用 m+ 1 个边顶点结点( 包括头结点) 构成的单链表来表示.
收稿日期: 2000- 10- 11
作者简介: 刘洋( 1972 ) , 男, 江西南康人, 助教, 高级程序员。