- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[计算机软件及应用]第7章2数据库
7.6 两点之间的 最短路径问题 求从某个源点到其余各点的最短路径 在这条路径上,必定只含一条弧,并且这条弧的权值最小。 下一条路径长度次短的最短路径的特点: 路径长度最短的最短路径的特点: 它只可能有两种情况:或者是直接从源点到该点(只含一条弧); 或者是从源点经过顶点v1,再到达该顶点(由两条弧组成)。 void DFSearch( int v, int s, char *PATH) { // 从第v个顶点出发递归地深度优先遍历图G, // 求得一条从v到s的简单路径,并记录在PATH中 visited[v] = TRUE; // 访问第 v 个顶点 Append(PATH, getVertex(v)); // 第v个顶点加入路径 for (w=FirstAdjVex(v); w!=0!found; w=NextAdjVex(v) ) if (w=s) { found = TRUE; Append(PATH, w); } else if (!visited[w]) DFSearch(w, s, PATH); if (!found) Delete (PATH); // 从路径上删除顶点 v } 2. 求两个顶点之间的一条路径 长度最短的路径 若两个顶点之间存在多条路径,则其中必有一条路径长度最短的路径。如何求得这条路径? a b c h d e k f g 因此,求路径长度最短的路径可以基于广度优先搜索遍历进行,但需要修改链队列的结点结构及其入队列和出队列的算法。 深度优先搜索访问顶点的次序取决于图的存储结构,而广度优先搜索访问顶点的次序是按“路径长度”渐增的次序。 例如:求下图中顶点 3 至顶点 5 的一条最短路径。 链队列的状态如下所示: 3 1 2 4 7 5 Q.front Q.rear 3 2 1 4 7 5 6 8 9 1) 将链队列的结点改为“双链”结点。即 结点中包含next 和priou两个指针; 2) 修改入队列的操作。插入新的队尾结点时,令其priou域的指针指向刚刚出队列的结点,即当前的队头指针所指结点; 3) 修改出队列的操作。出队列时,仅移动队头指针,而不将队头结点从链表中删除。 typedef DuLinkList QueuePtr; void InitQueue(LinkQueue Q) { Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); Q.front-next = Q.rear-next = NULL } void EnQueue( LinkQueue Q, QelemType e ) { p = (QueuePtr) malloc (sizeof(QNode)); p-data = e; p-next = NULL; p-priou = Q.front Q.rear-next = p; Q.rear = p; } void DeQueue( LinkQueue Q, QelemType e ) { Q.front = Q.front-next; e = Q.front-data } 7.4 (连通网的)最小生成树 假设要在 n 个城市之间建立通讯联络网,则连通 n 个城市只需要修建 n-1条线路,如何在最节省经费的前提下建立这个通讯网? 问题: 构造网的一棵最小生成树,即: 在 e 条带权的边中选取 n-1 条边(不构成回路),使“权值之和”为最小。 算法二:(克鲁斯卡尔算法) 该问题等价于: 算法一:(普里姆算法) 取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。 普里姆算法的基本思想: a b c d e g f 例如: 19 5 14 18 27 16 8 21 3 a e 12 d c b g f 7 14 8 5 3 16 21 所得生成树权值和 = 14+8+3+5+16+21 = 67 在生成树的构造过程中,图中 n 个顶点分属两
您可能关注的文档
最近下载
- 一年级数学起步,玩中学不焦虑——2025秋家长培训发言稿.pptx VIP
- 保险学(第五版)课件全套魏华林第0--18章绪论、风险与保险---保险市场监管、附章:社会保险.pptx VIP
- 电力市场的原理、变革与关键问题(41页).pptx VIP
- 《康复评定技术》课件——第五章 言语功能评定技术.ppt VIP
- 电子产品维修技术中职全套教学课件.pptx
- 化妆师理论知识考试模拟试卷及答案.docx VIP
- 《康复评定技术》课件——第三章 心肺功能评定技术.ppt VIP
- 2023年CSP-S组(提高组)初赛真题(文末附答案).pdf VIP
- DB53_T 1097-2022 受污染耕地严格管控技术规范.docx VIP
- 2021年一级建造师市政李四德-锦囊妙计.pdf VIP
文档评论(0)