程序如下: #include #include #include #define INFINITY 1000 #define max_name 50 #define max_vertex_num 50 typedef char vertex[max_name];//顶点名字串 typedef int adjMatrix[max_vertex_num][max_vertex_num];//邻接距阵 typedef struct {vertex adjvex; //邻接矩阵 int lowcost; //权值 }close[max_vertex_num];//定义一个结构以便在后面 closedge 使用 typedef struct//定义图 { vertex vexs[max_vertex_num]; //顶点集 adjMatrix arcs; //边 int vexnum,arcnum;//点个数,边个数 }MGraph; int LocateVex(MGraph G,vertex u)//若 G 中存在顶点u,则返回该点在图中位置;否则返回其他信息; { int i; for(i=0;i0) { min=c[j].lowcost; k=j; } return k; } void PRIM(MGraph G,vertex u) { int i,j,k=0; close closedge;//一个结构 bool isbreak=false; k=LocateVex(G,u);//u 在图中位置 返回 G.vexs[i]中下标 for(j=0;j<=G.vexnum;++j) //辅助数组初始化 closedge 从 O 开始 { if(j!=k)//没有自己到自己的 closedge[k].lowcost=0; strcpy(closedge[j].adjvex,u); closedge[j].lowcost=G.arcs[k][j];//列 } int flag[1000]; flag[0]=0; int count=1; for(i=1;i