void prim(adjmgraph g,minspantree closevertex[]) { vert x; int n=g.vertices.size,mincost; int *lowcost=(int *)malloc(sizeof(int)*n); int i,j,k=0; for(i=1;i<n;i++) lowcost[i]=g.edge[0][i]; Listget(g.vertices,0,&x); closevertex[0].vertex=x; lowcost[0]=-1; for(i=1;i<n;i++) { mincost=maxweight; for(j=1;j<n;j++) { if(lowcost[j]<mincost&&lowcost[j]>0) { mincost=lowcost[j]; k=j; } } } Listget(g.vertices,k,&x); closevertex[i].vertex=x; closevertex[i].weight=mincost; lowcost[k]=-1; for(j=1;j<n;j++) { if(g.edge[k][j]<lowcost[j]) lowcost[j]=g.edge[k][j]; } }
时间: 2024-04-02 08:33:36 浏览: 64
这是一个实现Prim最小生成树算法的代码。算法的基本思想是从图中的某个顶点开始,每次找到与当前生成树集合相邻的权值最小的顶点,将其加入生成树集合中,直到生成树集合包含所有顶点为止。具体实现中,代码首先初始化lowcost数组,表示当前生成树集合与其余顶点的最小权值。然后从第一个顶点开始寻找权值最小的相邻顶点,将其加入生成树集合中,并更新lowcost数组。重复该过程,直到生成树集合包含所有顶点为止。
注:由于代码缩进不够规范,有可能存在语法错误。
阅读全文