#include <stdio.h> #include <string.h> #define MAX 505 #define MAXCOST 0x7fffffff int sum,flag,num; void Prim(int graph[][MAX],int n) { int i,j,k,min; int lowcost[MAX]; int adjvex[MAX]; for(i=1;i<n;i++) lowcost[i]=graph[0][i]; //从第一个的顶点开始 memset(adjvex,0,sizeof(adjvex)); min=MAXCOST; for(i=1;i<n;i++) { min=MAXCOST; for(j=1;j<n;j++) if(adjvex[j]==false && lowcost[j]<min) { min=lowcost[j]; k=j; //记下最小的点 } adjvex[k]=true; //为true表示该权值已经是最小,为flase是还不确定,应继续更新 for(j=1;j<n;j++) { if(adjvex[j]==false && lowcost[j]>graph[k][j]) //更新lowcost lowcost[j]=graph[k][j]; } } for(i=1;i<n;i++) { if(lowcost[i]!=MAXCOST) { sum+=lowcost[i]; //这就是最小生成树 num++; } } }