普里姆算法
#include <stdio.h>#define MAXVEX 100#define INF 32767 /*INF表示∞*/void Prim(int cost[][MAXVEX],int n,int v)/*输出最小生成树的每条边*/{ int lowcost[MAXVEX],min; int closest[MAXVEX],i,j,k; for (i=0;i<n;i++) /*给lowcost[]和closest[]置初值*/ { lowcost[i]=cost[v][i]; closest[i]=v; } for (i=1;i<n;i++) /*找出n-1个顶点*/ { min=INF; for (j=0;j<n;j++) /*在(V-U)中找出离U最近的顶点k*/ if (lowcost[j]!=0 && lowcost[j]<min) { min=lowcost[j]; k=j; } printf(" 边(%d,%d)权为:%d\n",closest[k],k,min); lowcost[k]=0; /*标记k已经加入U*/ for (j=0;j<n;j++) /*修改数组lowcost和closest*/ if (cost[k][j]!=0 && cost[k][j]<lowcost[j]) { lowcost[j]=cost[k][j]; closest[j]=k; } }}void main(){ int n=7; int cost[7][MAXVEX]={ {0,50,60,INF,INF,INF,INF}, {50,0,INF,65,40,INF,INF}, {60,INF,0,52,INF,INF,45}, {INF,65,52,0,50,30,42}, {INF,40,INF,50,0,70,INF}, {INF,INF,INF,30,70,0,INF}, {INF,INF,45,42,INF,INF,0}}; printf("最小生成树:\n");Prim(cost,n,0);}