一.构造最小生成树必须满足以下条件
①只能使用图中的边;
②只能使用图中的n-1条边;
③添加的边不能产生回路;
Prim算法是通过每次选择提条代价最小的边辑器相应 的顶点加入到最小生成树中,因此来构造最小生成树。
二.基本步骤
设基本图为G=(V,E),最小生成树Tmst=(Vt,Et)。
①从图G中的任意顶点Vm(Vm属于V)开始,将Vm加入最小生成树中;
②选择代价最小的边(Vk,Vj)加入最小生成书中,并将顶点Vj加入最小生成树中,要求两个顶点属于不同的集合,Vk属于Vt,Vj属于V-Vt;
③重复这个过程,直到Tmst中有n-1条边为止,即Vt=V;
代码既及注释如下
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
typedef struct GRAPHMATRIX_STRU
{
int size;
int **graph;
}GraphMatrix;
GraphMatrix* InitGraph(int num)
{
int i,j;
GraphMatrix *graphMatrix=(GraphMatrix*)malloc(sizeof(GraphMatrix));
graphMatrix->size=num;
graphMatrix->graph=(int**)malloc(sizeof(int*)*graphMatrix->size);
for(i=0;i<graphMatrix->size;i++)
graphMatrix->graph[i]=(int*)malloc(sizeof(int)*graphMatrix->size);
for(i=0;i<graphMatrix->size;i++)
{
for(j=0;j<graphMatrix