#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define INFINITY INT_MAX
#define MAX_VERTEX_NUM 20 //最大顶点数为20//
typedef int VRType;
typedef int InfoType;
typedef char VerTexType;
typedef struct ArcCell // 邻接矩阵定义//
{VRType adj;
InfoType *info; }ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct
【Prim最小生成树】是一种在图论中寻找最小生成树的经典算法,主要应用于无向加权图。最小生成树是连接图中所有顶点的树形子图,且其所有边的权重之和最小。Prim算法是解决这个问题的有效方法。
算法步骤如下:
1. 初始化:选择图中的任意一个顶点作为初始生成树的一部分。将其他顶点标记为未访问状态。创建一个辅助数组`closedge`,用于存储每个顶点与生成树之间最短边的信息,包括边的权值和相邻顶点的序号。
2. 迭代过程:在每一步中,找出未访问顶点中与生成树连接的边中权值最小的一条。将这条边的另一端顶点加入生成树,更新`closedge`数组,并标记这个顶点为已访问。
3. 重复步骤2,直到所有顶点都被包含在生成树中。此时生成树构建完成。
在给定的代码中,`CreateGraph`函数用于创建图的邻接矩阵表示,`MiniSpanTree_PRIM`函数实现了Prim算法。`LocateVex`函数用于找到指定顶点在数组中的位置,`minimum`函数则用于找出`closedge`数组中权值最小的边。
代码中定义了以下结构体:
- `ArcCell`:表示图的邻接矩阵中的边,包含边的权值(`adj`)和可能的附加信息(`info`)。
- `AdjMatrix`:邻接矩阵,由`ArcCell`类型的二维数组组成。
- `MGraph`:表示整个图,包含顶点数组(`vexs`)、邻接矩阵(`arcs`)、顶点数(`vexnum`)和边数(`arcnum`)。
- `closedge`:记录最小边信息的辅助结构,包括顶点序号(`adjvex`)和最低成本(`lowcost`)。
在Prim算法实现中,首先初始化`closedge`数组,然后在每一轮迭代中,通过`MiniSpanTree_PRIM`函数的内层循环找到当前未访问顶点中权值最小的边,并更新生成树和`closedge`数组。直到所有顶点都被处理,Prim算法结束。
实验环境要求学生具备微机、基本的编程环境(如Turbo C 3.0),以及对图的遍历和最小生成树概念的理解。实验旨在帮助学生掌握Prim算法,理解如何通过此算法构造无向联通图的最小生成树。通过实际操作,学生能够加深对图论和算法应用的了解。