- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构C语言版课件1.ppt
对AOV网进行拓扑排序的步骤是: (1) 在网中选择一个没有前驱的顶点且输出之。 (2) 在网中删去该顶点,并且删去从该顶点发出的全部有向边。 (3) 重复上述两步,直到网中不存在没有前驱的顶点为止。 这样操作结果有两种:一种是网中全部顶点均被输出,说明网中不存在有向回路;另一种是网中顶点未被全部输出,剩余的顶点均有前驱顶点,说明网中存在有向回路。 拓扑排序的方法很多,主要有深度优先搜索排序和广度优先搜索排序两种,下面分别介绍。 1. 广度优先搜索拓扑排序 根据拓扑排序的方法,把入度为0的顶点插入一个队列,按顺序输出。本算法中将顶点的入度记录在邻接表数组的数据域中,即记录在list[v].data中。算法如下: void topsort(vexnode list[]) {arcnode * ptr; int v,w,n1=0; for (v=1;v=n;v++) if (list[v].data==0) enqueue (v); /*利用循环检测入度为0的顶点并入队,即将无前驱的顶点加入队列*/ while((v=dequeue())!=EOF) { printf(%-5d%c,v,(++n1%10==0)? /n:); /*显示无前驱顶点,即删除这些顶点,并计数*/ ptr=list[v].firstarc; /*取上面被删除顶点所相邻顶点的地址,以便删除指向它的边*/ while (ptr!=NULL) { w=ptr-vertex; /*取相邻顶点的序号*/ if (--list[w].data==0) enqueue(w); /*将相邻顶点的入度减1,即删除指向该相邻顶点的一条边。若该顶点的入度减1后,*/ /*入度为0,则成为无前驱顶点,所以入队列以便删除*/ ptr=ptr-next; /*取下一个相邻顶点的地址*/ } }/*循环结构,无前驱的顶点逐个出队 if (n1n)/*如果n1n,则拓扑排序失败*/ printf(not a set of partial order); } 图7.10 拓扑排序 如图7.10的广度优先搜索拓扑排序序列为① ② ④ ③ ⑤ ⑥。 此算法中如果把enqueue(v)改为push(v),把dequeae(v)改为pop(v),则可得另外一种方式的拓扑序列。 2. 深度优先拓扑排序 根据拓扑排序的方法,先用深度优先搜索法向下走,直到无路可走为止。每走一步都伴随着顶点进栈。无路可走时出栈,并同时显示顶点序号。当退回一步后,换向再走,若无向可换,则出栈,即删除无前驱的顶点。算法如下: topodfs(v) int v; int w; list[v].data=1; /*对搜索过的顶点标志改为1,以免重复,并进栈*/ push(v); while (ptr[v]!=NULL) w=ptr[v]-vertex; /*则取出相邻顶序的序号,看相邻顶点是否搜索过*/ if (list[w].data==0) topodfs(w); /*若相邻顶点未被搜索过, 则递归调用拓扑排序函数,去深度优先搜索相邻顶点*/ ptr[v]=ptr[v]-next; /*取另一个相邻顶点*/ printf (%5d,pop ()); /*按相反的拓扑序列显示拓朴序列的顶序*/ 7.6 实习:最短路径的实现 用图表示出全国直辖市和省会城市的铁路网络,量出地图上直辖市和省会城市的距离,并输入计算机,要求能求出从任一城市出发到其他城市的最短路径并输出。 主程序如下: #include stdio.h main() int cost[MAX][MAX],n; /*cost[][]是带权邻接矩阵*/ n=adjmatrix(cost); /*调用子函数建立邻接矩阵*/ prmatrix(cost,n); /*调用子函数显示邻接矩阵*/ dijkstra(cost,n); /*调用子函数求单源最短路径*/ 建立带权邻接矩阵的算法如下: admatrix(matrix) int matrix[][max]; int vexnum,arc
您可能关注的文档
- 数字逻辑电路测试与设计第2版教学课件ppt作者李玲第1章数字逻辑代数基础课件.ppt
- 数字逻辑电路测试与设计第2版教学课件ppt作者李玲第2章集成门电路课件.ppt
- 数字逻辑电路测试与设计第2版教学课件ppt作者李玲第3章组合逻辑电路课件.ppt
- 数字逻辑电路测试与设计第2版教学课件ppt作者李玲第4章触发器与时序电路课件.ppt
- 数字逻辑电路测试与设计第2版教学课件ppt作者李玲第5章模数和数模转换电路课件.ppt
- 数字逻辑第2版习题答案作者武庆生数字逻辑第六章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第三章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第二章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第五章习题课件.ppt
- 数字逻辑第2版习题答案作者武庆生第四章习题课件.ppt
文档评论(0)