
0
数据结构课程设计(最小生成树)
一、 设计目的和要求
(1)、实验题目:给定一个地区的 n 个城市间的距离网,用 Prim 算法或 Kruskal 算法
建立最小生成树,并得到的最小生成树的代价。
(2)、实验要求:
1、城市间的距离网采用的邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出
的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要
求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成
树的代价。
2、表示城市间距离网的邻接矩阵(要求至少 6 个城市,10 条边)
3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。
二、 设计内容及步骤
(1)、问题分析及采用数据结构:
1、根据题目要求,首先要建立城市间的距离网,并且采用邻接矩阵表示,则使用
到的数据结构是图的形式。图的作用是实现城市的距离网,采用顺序存储结构。数据结
构可以用如下表示:
typedef struct
{
SeqList Vertices; //存放图中各结点
int edge[MaxVertices][MaxVertices]; //存放权值的二维数组
int num_edge; //图的边数
}Graph;
2、完成距离网的存储后,就要用 Prim 算法和 Kruskal 算法来实验最小生成树。
Prim 算法是以结点为最小生成树的开始,再找其相应的最小边来实现。可以设计
为两个参数,一个参数为图 G,另一个参数是通过函数得到的最小生成树结点数据和相
应结点的边的权值数据 closeVertex.所以其数据结构可以定义如下:
typedef struct
{
DataType vertex;
int weight;
}TreeNode;
Kruskal 算法是以图中最小边开始慢慢寻找最小生成树的代价。所以它的结构包含
最小边及边的两结点的下标,标置位是判断结点是否已经参加比较。其结构可以定义如
下:
typedef struct
{
int row; //行下标
int col; //列下标
int weight; //边权值
int flag; //标志位
}TreeEdge;//边信息
(2)算法设计
1、首先设计的是顺序表,用来存放图中的各个结点的信息。这样可以看到结点的