- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设G=(V,E)是带权的连通图,T=(V’,E’)是正在构造中的生成树。初始状态下,这棵生成树只有一个顶点,没有边,即V’={v0},E’={ },v0是任意选定的起始顶点。 从初始状态开始,重复执行下列运算: 在所有u?V’,v?V-V’的边(u,v),(u,v)?E 中找一条代价最小的边(u’,v’), 边(u’,v’)并入集合E’,将顶点v’并入集合V’。 直到V=V’为止。 这时E’中必有n-1条边,T=(V’,E’)是图G的一棵最小代价生成树。 1.普里姆算法(Prim) 9.6.2 普里姆算法 本算法的C++实现中图采用邻接表存储。 为实现Prim算法,定义两个一维数组:nearest,lowcost,用于存放中间构造过程和最终结果。再定义一个一维数组mark,用于表示某个顶点是否在生成树上。 对于当前尚未入选生成树的顶点v,此时可存在若干条边使它与生成树上顶点相邻接,边(u,v)是其中权值最小者,那么nearest[v]=u,而该最小权值w(u,v)存在lowcost[v]中。 如果mark[v]=false,表示v未加入生成树,反之,v已选入。 初始时,nearest[v]=-1,lowcost[v]=INFTY,mark[v]=false. INFTY 是大于图中任何边的权值 2.实现普里姆算法 for (int i=0;in;i++ ) { //(1)初始化数组 mark[i]=false; nearest[i]=-1; lowcost[i]=maxnum;//INFTY } 实现普里姆算法 普里姆算法的C++程序 templateclass T void ExtLGraphT ::Prim(int k,int* nearest,T* lowcost) { bool* mark=new bool[n]; ENodeT *p; if (k0||kn-1) throw OutofBounds; for (int i=0;in;i++){ // 初始化 nearest[i]=-1;mark[i]=false; lowcost[i]=INFTY; } lowcost[k]=0; nearest[k]=k; mark[k]=true; // 源点k加入生成树 for (i=1;in;i++){//(3)向生成树上加n-1条边 for(p=a[k];p;p=p-nextArc){ //修改lowcost和nearest的值 int j= p-adjVex; if ((!mark[j] )(lowcost[j]p-w)){ lowcost[j]=p-w; nearest[j]=k; } } T min=INFTY; //求下一条最小权值的边 for (int j=0;jn;j++) //求不属于树中的顶点中,具有最小lowcost的顶点k if ((!mark[j])(lowcost[j]min)){ min=lowcost[j]; k=j; } mark[k]=true; //将顶点k加到生成树上 } } } 程序的时间复杂度: O(n2) 2加入树中,修改2个数组。 5加入树中,修改2个数组。 t for (j=0;jn;j++) cout“(”nearest[j]“,”j “,”lowcost[j]“)”; 输出结果: (0,0,0)(2,1,5)(0,2,1)(5,3,2)(1,4,3)(2,5,4) 9.6.3 克鲁斯卡尔算法 最小代价生成树的另一种算法。通过找n-1条不构成回路的最小权值边,来得到最小代价生成树。 课堂提要 第9章 图 9.1 图的基本概念 9.2 图的存储结构 9.3 图的遍历 9.4 拓扑排序 9.5 关键路径 9.6 最小代价生成 树 设G=(V,E)是带权的连通图,T=(V’,E’)是正在构造中的生成树(构造之前是生成森林)。初始状态下,这个生成森林包含n棵只有一个结点的树,没有边,即V’=V,E’={ }。 从初始状态开始,重复执行下列运算: (1)在E中选一条权值最小的边(u,v),并从E中删除; (2)若在T中加入(u,v)后不形成回路,
您可能关注的文档
最近下载
- IPCWHMAA620D+CN中文版+2020线缆及线束组件的要求与验收.docx VIP
- 餐饮行业培训-中餐服务.ppt VIP
- 低温工作条件下立式平底圆筒形储罐 第二部分 储存最低温度达-165度的液化气的单容、双容和全容金属罐的设计和制造规范.doc VIP
- 政府机关物业服务投标方案399页.doc VIP
- 老年心血管疾病的综合管理题库答案-2025年华医网继续教育答案.docx VIP
- 全套课件-中国城市建设史.ppt
- 通用版小升初英语专项复习---用所给单词的适当形式填空(含答案).docx VIP
- 力学_舒幼生_第七章振动和波-公开课件(讲义).ppt VIP
- 政府机关单位物业服务投标方案【超级高端完整版】.doc VIP
- QC七大手法培训资料.pptx VIP
文档评论(0)