生成最小树普利姆算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
//
typedef struct{
int arcs[20][20];
int vexs[20];
int vexnum,arcnum;
}MGraph;
//****************确定输入结点的位置************* int LocateVex(MGraph G,int V)
{
for(int i=0;i if(V==G.vexs[i]) { return i; break; } if(i==G.vexnum) cout<<"No find the vex"< return -1; } //********************新建无向网****************** void CreateUDN(MGraph &G) { cout<<"输入结点数、边数:"; cin>>G.vexnum>>G.arcnum; cout<<"输入各结点:"; for(int i=0;i cin>>G.vexs[i]; for(i=0;i for(int j=0;j G. arcs[i][j]=100000; cout<<"输入各边的两顶点及权值:"; int V1,V2; int w,j; for(int k=0;k { cin>>V1>>V2>>w; i=LocateVex(G,V1);j=LocateVex(G,V2); G.arcs[i][j]=G.arcs[j][i]=w; } } // struct{ int adjvex;//结点 int lowcost;//结点的权值 }closedge[20]; //****************生成普利姆最小树**************** void MiniSpanTree_PRIM(MGraph G,int v) { int k; k=LocateVex(G,v); for(int j=0;j if(j!=k) { closedge[j].adjvex=v; closedge[j].lowcost=G.arcs [k][j]; } closedge[k].lowcost=0; for(int i=1;i //k=minimum(closedge); //***********************************************// //********************寻找下一个结点*************** int min; for(j=0;j if(closedge[j].lowcost!=0) { min=j; break; } for(j=j+1;j if(closedge[j].lowcost!=0) if(closedge[j].lowcost min=j; k=min; //**************************************************// cout<<"输出生成树的边:"< cout< closedge[k].lowcost=0; //*******************************************************// //****************重新选择最小边************************* for(j=0;j if(G.arcs[k][j] { closedge[j].adjvex=G.vexs[k]; closedge[j].lowcost=G.arcs[k][j]; } //********************************************************// } } void main() { int i,v; MGraph G;CreateUDN(G); cout<<"put vex:"< for(i=0;i cout< cout< cout<<"从结点v开始:v="; cin>>v; MiniSpanTree_PRIM( G, v); }