1.prim算法:一种计算生成最小生成树的方法,它的每一步都会为一棵生长中的树添加一条边.
2.时间复杂度:
通过邻接矩阵图表示的简易实现中,找到所有最小权边共需O(V)的运行时间。使用简单的二叉堆与邻接表来表示的话,普里姆算法的运行时间则可缩减为 O(ElogV),其中E为连通图的边数,V为顶点数。如果使用较为复杂的斐波那契堆,则可将运行时间进一步缩短为O(E+VlogV),这在连通图足够 密集时(当E满足Ω(VlogV)条件时),可较显著地提高运行速度。
3.代码实现:
1 #include <stdio.h> 2 #define MAXV 100 //最大顶点个数 3 #define INF 32767 //INF表示∞ 4 typedef struct 5 { int edges[MAXV][MAXV];//邻接矩阵 6 int vexnum,arcnum; //顶点数,弧数 7 } MGraph;//图的邻接矩阵类型 8 9 void init(MGraph &g);//初始化邻接矩阵 10 void DispMat(MGraph g);//输出邻接矩阵g 11 void prim(MGraph g,int v); 12 int main() 13 { 14 int u=3; 15 MGraph g;//图的邻接矩阵 16 init(g);