最小生成树中minium函数怎么写

1.c语言最小生成树怎样写prim算法/* 函数功能:求图的最小生成树 。
函数原形:GraphClass*Prim(GraphClass &Graph); 参数:GraphClass&Graph:目标图 。返回值:GraphClass*型,最小生成树地址 。
备注:无 。*/ template GraphClass*Prim(GraphClass &Graph) { ArcType Min,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=new GraphClass(Graph.GetSize()); int i,j,k,x,y; bool *Vertex=new bool[Graph.GetSize()]; for (i=0;i<=Graph.GetSize()-1;i++) { Vertex[i]=false; Mcst->UpdateVex(i,Graph.GetVex(i)); } Vertex[0]=true; for (k=1;k<=Graph.GetSize()-1;k++) { Min=Infinite; for (i=0;i<=Graph.GetSize()-1;i++) for(j=0;j<=Graph.GetSize()-1;j++) if (Graph.GetArc(i,j)>0&& Vertex[i] && !Vertex[j] && Graph.GetArc(i,j)UpdateArc(x,y,Graph.GetArc(x,y)); } return Mcst; } Kruskal算法/* 函数功能:求图的最小生成树 。
函数原形:GraphClass*Kruskal(GraphClass &Graph); 参数:GraphClass&Graph:目标图 。返回值:GraphClass*型,最小生成树地址 。
备注:无 。*/ template GraphClass*Kruskal(GraphClass &Graph) { ArcType Min,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=new GraphClass(Graph.GetSize()); int i,j,k,x,y,a,b,*VexSet=new int[Graph.GetSize()]; for (i=0;i<=Graph.GetSize()-1;i++) { VexSet[i]=i; Mcst->UpdateVex(i,Graph.GetVex(i)); } for (k=1;k<=Graph.GetSize()-1;k++) { Min=Infinite; for (i=0;i<=Graph.GetSize()-1;i++) for(j=0;j<=Graph.GetSize()-1;j++) if (Graph.GetArc(i,j)>0&& VexSet[i]!=VexSet[j] && Mcst->GetArc(i,j)==0 && Graph.GetArc(i,j)UpdateArc(x,y,Graph.GetArc(x,y)); } return Mcst; } 。
2.求我下面程序函数的流程图普里姆算法
功能:是利用普里姆算法求出无向网所对应的最小生成树.
实现过程:在其函数体中,首先,定义closedge用于存放最小生成树中的顶点,调用函数Locate()求出起点u在顶点向量表中的位置,初始化U={u},利用for循环对V-U中的顶点i,初始化,再利用for循环找n-1条边,其中,调用函数Minium()求出辅助数组中权值最小的边,并将其在辅助数组中的相应位置返回到主调函数中,最后,输出<;起点->;终点 权值> 。
代码如下:
void PRIM(MGraph &G,VertexType u)
{
int i,j,k;
minside closedge;
k=LocateVex(G,u);
for(j=0;j<G.vexnum;++j) // 辅助数组初始化
【最小生成树中minium函数怎么写】{
if(j!=k)
{
strcpy(closedge[j].adjvex,u);
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
closedge[k].lowcost=0; // 初始,U={u}
printf("\t\t最小代价生成树的各条边及权值为:\n");
printf("\n");
printf("\t\t<;起点->;终点>\t权值\n");
for(i=1;i<G.vexnum;++i)
{ // 选择其余G.vexnum-1个顶点
k=minimum(closedge,G); // 求出T的下一个结点:第K顶点
printf("<%s-%s>\t\t%d\n",closedge[k].adjvex,G.vexs[k],closedge[k].lowcost); // 输出生成树的边
closedge[k].lowcost=0; // 第K顶点并入U集
for(j=0;j<G.vexnum;++j)
if(G.arcs[k][j].adj<closedge[j].lowcost)
{
// 新顶点并入U集后重新选择最小边
strcpy(closedge[j].adjvex,G.vexs[k]);
closedge[j].lowcost=G.arcs[k][j].adj;
}
}
}
(5)子函数int LocateVex(MGraph G,VertexType u)
功能:是求出某个顶点在顶点向量表中的位置 。
实现过程:在其函数体中通过for循环将某一顶点与顶点向量表中的所有顶点进行比较,当出现两者相等时,将该顶点在vexs[]数组的下标通过return语句返回,否则返回-1;