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


代码如下:
int LocateVex(MGraph G,VertexType u) //若G中存在顶点u,则返回该顶点在图中的位置,否则返回-1
{
int i;
for(i = 0; i < G.vexnum; ++i)
if( strcmp(u, G.vexs[i]) == 0)
return i;
return -1;
}
(6)子函数int minimum(minside S,MGraph G)
功能:是求出辅助数组中权值最小的边 。
代码如下:
int minimum(minside S,MGraph G) //求closedge.lowcost的最小值
{
int i=0,j,k,min;
while(!S[i].lowcost)
i++;
min=S[i].lowcost; // 第一个不为0的值
k=i;
for(j=i+1;j<G.vexnum;j++)
if(S[j].lowcost>0)
if(min>S[j].lowcost)
{
min=S[j].lowcost;
k=j;
}
return k;
}
3.c语言最小生成树怎样写prim算法/*函数功能:求图的最小生成树 。
函数原形:GraphClass*Prim(GraphClass &Graph);参数:GraphClass&Graph:目标图 。返回值:GraphClass*型,最小生成树地址 。
备注:无 。*/templateGraphClass*Prim(GraphClass &Graph){ ArcTypeMin,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=newGraphClass(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*型,最小生成树地址 。
备注:无 。*/templateGraphClass*Kruskal(GraphClass &Graph){ ArcTypeMin,Infinite=ArcType(unsigned(~0)/2); GraphClass *Mcst=newGraphClass(Graph.GetSize()); int i,j,k,x,y,a,b,*VexSet=newint[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;} 。
4.最小生成树的定义以及有关算法Kruskal算法和Prim算法 任何只由G的边构成,并包含G的所有顶点的树称为G的生成树(G连通).加权无向图G的生成树的代价是该生成树的所有边的代码(权)的和.最小代价生成树是其所有生成树中代价最小的生成树.参考代码:(仅为主程序,更多代码在 /zsb/zsx/zsx07/zsx079/main9/zsx079001.htm Kruskal算法和Prim算法 任何只由G的边构成,并包含G的所有顶点的树称为G的生成树(G连通). 加权无向图G的生成树的代价是该生成树的所有边的代码(权)的和. 最小代价生成树是其所有生成树中代价最小的生成树. 参考代码: (仅为主程序,更多代码在 /bbs/dispbbs.asp?boardID=1&ID=69&page=1 解压密码: ) #include "Sets.h" #include "themap.h" #include "windows.h" #include #include #include using namespace std; /* 功能: 演示Kruskal算法和Prim算法 集合的并,元素查找的操作及应用 说明: 代码均在vc++6.0环境下编译均通过 在非VC++6.0环境下编译请去掉头文件 windows.h 和函数 end() 如果NULL未定义请自定义 #define NULL 0 或 #define NULL ((void*)0) 作者: baihacker 时间: 2007.2.3 */ const VSIZE = 7;//7个顶点 const INFINITY = 10000;//10000作为无穷大来处理 void LoadData(int cost[][VSIZE+1], Edge edge[]); void end(); /* 函数名: Kruskal 和 Prim 参数: 边,代价,边数,顶点数,最小代价生成树的顶点 返回值: 返回值为-1,不存在最小代价生成树 返回值大于0时为最小代价生成树的代价 最小代价生成树的边在vector