- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
a b c d e f g h a b c d e f g h a b c e 求解拓扑序列: 存在环 ( f, d , g , h , f ) 6.6.2 拓扑排序的实现 算法要考虑的问题: “没有前驱”如何判断 “删除顶点及以它为尾的弧”如何操作 解决方法: 以“入度为零”作为“没有前驱”的量度 算法中附设了“栈”,用于保存当前出现的入度为零的顶点 “删除顶点及以它为尾的弧”的这类操作可用“弧头顶点的入度减1”的办法来替代 6.6.2 拓扑排序的实现 由于拓扑排序中对图的主要操作是“找从顶点出发的弧”,并且AOV网在多数情况下是稀疏图,因此存储结构取邻接表为宜 6.6.2 拓扑排序的实现 算法过程: (1)写出有向图的邻接表存储结构 (2)统计各顶点的入度值 (3)从上到下扫描各顶点入度,若为0则入栈 (4)从栈顶取一顶点加入拓扑序列中 (5) 相应的在邻接表中以该顶点为起点的终点入度值减1,若为0则入栈 (6)重复上述第4、5步 6.6.2 拓扑排序的实现 1 0 3 2 4 5 0 0 2 2 1 3 2 2 3 4 3 5 5 5 0 1 2 3 4 5 0 1 1 1 1 0 4 4 2 0 0 2 0 1 2 3 3 0 5 5 辅助栈 当顶点入度为0即入栈 取栈顶元素加入拓扑序列中 唯一的拓扑有序序列为: 顶点编号 入度值 6.6.2 拓扑排序的实现 【算法6.11】求各顶点入度的算法 public static int[] findInDegree(ALGraph G) throws Exception { int[] indegree = new int[G.getVexNum()]; for (int i = 0; i G.getVexNum(); i++) for (ArcNode arc = G.getVexs()[i].getFirstArc(); arc != null; arc = arc.getNextArc()) ++indegree[arc.getAdjVex()];// 入度增1 return indegree; }//算法6.11结束 时间复杂度为 O(e) 6.6.2 拓扑排序的实现 【算法6.12】拓扑排序 public static boolean topologicalSort(ALGraph G) throws Exception { int count = 0;// 输出顶点计数 int[] indegree = findInDegree(G);// 求各顶点入度 LinkStack S = new LinkStack();// 建零入度顶点栈 for (int i = 0; i G.getVexNum(); i++) if (indegree[i] == 0)// 入度为0者进栈 S.push(i); …… 时间复杂度为 O(n) 6.6.2 拓扑排序的实现 【算法6.12】拓扑排序 public static boolean topologicalSort(ALGraph G) throws Exception { …… while (!S.isEmpty()) { int i = (Integer) S.pop();//栈不空,取栈顶元素 // 输出v号顶点并计数 System.out.print(G.getVex(i) + ); ++count; for (ArcNode arc = G.getVexs()[i].getFirstArc(); arc != null; arc = arc.getNextArc()) { int k = arc.getAdjVex(); // 对i号顶点的每个邻接点的入度减1 if (--indegree[k] == 0) S.push(k);// 若入度减为0,则入栈 }//end for }//end while …… 时间复杂度为 O(n+e) 6.6.2 拓扑排序的实现 【算法6.12】拓扑排序 public static boolean topologicalSort(ALGraph G) throws Exception { …… if (count G.getVexNum()) return false;// 该有向图有回路 else return true; }算法6.12结束 拓扑排序算法总的时间复杂度为O(n+e) 6.6.2 拓扑排序的实现 教学内容 6.1 图的概述 6.2 图的存储结构 6.3 图的遍历 6.4 最小生成树 6.5 最短路径 6
您可能关注的文档
最近下载
- 2024-2030全球商业气象服务行业调研及趋势分析报告.docx
- 高考英语复习读后续写练习+“千层面之爱”+传递全球温暖+课件.pptx VIP
- 新教材 人教A版高中数学选择性必修第一册全册各章节 知识点考点汇总及解题方法提炼.pdf VIP
- Midea 美的 R22W01BW11SECN扫地机器人 说明书.pdf
- 高考英语复习读后续写练习:爱心传递:善举循环的温暖故事+课件.pptx VIP
- 年产15万吨苯酚丙酮项目初步设计说明书.doc
- 燃气设备设施定期检查制度.docx VIP
- 内黄县各级文物保护单位一览表(2024版).docx VIP
- 高考英语复习读后续写练习:寒冬里的温暖与人性光辉+课件.pptx VIP
- 不收版面费的中文期刊(小木虫).doc VIP
文档评论(0)