【简答题】
【说明】 应用Prim算法求解连通网络的最小生成树问题。请阅读程序后填空。 const int MaxInt=INT MAX; //INT MAX的值在<limits.h>中 const int n=6; //图的顶点数,应由用户定义 typedef int AdjMatrix[n][n]; //用二维数组作为邻接矩阵表示 typedef struct{ //生成树的边结点 int fromVex,to Vex; //边的起点与终点 int weight; //边上的权值 }TreeEdSenode; typedef TreeEdgeNode MST[n-1]; //最小生成树定义 void PrimMST (AdjMatrix G,MST T,int rt){ //从顶点rt出发构造图G的最小生成树T,rt成为树的根结点 TreeEdgeNode e; int i,k=0,min,minpos,v; for(i=0;i<n;i++) //初始化最小生成树T if(i!=rt){ T[k].fromVex=rt; (1) ; T[k++].weight=G[rt][i]; } for(k=0;k<n-1;k++){ //依次求MST的候选边 (2) ; for(i=k;i<n-1;i++) 八遍历当前候选边集合 if(T[i].weight<min) //选具有最小权值的候选边 {min=T[i].weight; (3) ;} if(min==MaxInt) //图不连通,出错处理 {cerr<<“Graph is disconnected!”<<endl; exit(1);} e=T[minpos];T[minpos]=T[k]; (4) ; v=T[k].to Vex; for(i=k+1;i<n-1;i++) //修改候选边集合 if(G[v][T[i].to Vex]<T[i].weight){ T[i].weight=G[v][T[i].toVex]; (5) ; } } }
手机使用
分享
复制链接
新浪微博
分享QQ
微信扫一扫
微信内点击右上角“…”即可分享
反馈
收藏
举报
参考答案:
【简答题】已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};按照普里姆算法从顶点1出发得到最小生成树,试写出在最小生成树中依次得到的各条边。
【简答题】已知一个图的顶点集V和边集E分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};按照普里姆算法从顶点1出发得到最小生成树,试写出在最小生成树中依次得到的各条边。
参考解析: