第8章图解析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章图解析

图8-28 表头结点vex域和栈指针top的变化 在图8-28中,(a)图是建立邻接表后的状态;(b)图是开始拓扑排序,入度为零的结点入栈后的状态;(c)图是输出v1后的状态;(d)图是输出v4后的状态;(e)图是输出v2后的状态;(f)图是输出v3后的状态;(g)图是输出v5后的状态。图中带尖括号的值表示指针的值。 为了便于在计算机中实现拓扑排序,这里给出了AOV网的存储结构、邻接表的C语言算法实现的过程。 #includestdio.h nax = 10; struct node { int vex; struct node * next; } a1[nax]; TOPORDER(struct node a1; int n) { int i,j,k,top; struct node * q; top = 0; /* 指针置初值 */ for(i = 1; i = n; i ++) if(a1[i].vex == 0) /* 将入度为零的结点序号入栈 */ { a1[i].vex = top; top = i; } i = 0; /* 建立输出结点数计数器i,初值为零 */ puts(DOES THIS NETWORD HAVE ATOPOLOGICAL ORDER AS BELOW? ); while(top! = 0) { j=top; top = a1[top].vex; printf(-V%2d, j); /* 退栈,输出栈顶元素vj */ i ++;q = a1[j].next; /* 计数器增1,设立链表搜索指针q */ WHILE(q! = NULL) /* 结点j是否有直接后继 */ { k = q→vex; a1[k].vex = a1[k].vex -1; /* 将结点j的直接后继k的入度减1 */ if(a1[k].vex == 0) /* 结点k的入度是否为零 */ { a1[k].vex = top; top = k; } /* 结点k入栈 */ q = q→next; } puts(\n); } if(i n) puts(NO,THIS NETWORK HAS A CYCLE); else puts(YES); } 执行以上的拓扑排序过程,若图中没有回路,则将输出结点以表示活动,若在图中存在回路,则该拓扑排序的算法将提示存在回路。 分析以上的算法,对于有n个结点、e条有向边的AOV网,建立邻接表的执行时间为O(e)。在拓扑排序过程中,检测入度为零的结点的时间为O(n)。当网中不存在回路时,每个结点需进栈一次,输出结点n次,入度减1的运算需要进行e次。因此,拓扑排序算法总的执行时间为O(n+e)。 8.7 小结 本章主要讨论图这一重要的数据结构。在线性表中,每个数据元素最多只有一个直接前趋和一个直接后继。在树结构中,数据元素之间有层次关系,每一层上的数据元素可以与下层的多个数据元素相连接,某个结点最多只有一个直接前趋,但可以有多个直接后继。在图结构中,数据元素间的联系是任意的,任何一个元素都可以与其他多个结点相连接,即任何一个数据元素都可以有多个直接前趋,也可以有多个直接后继,这种关系用边或弧表示。 图的存储结构主要有两种:邻接矩阵和邻接表。其中,邻接矩阵中的网结构还要存储所有的权值;邻接表还有逆邻接表和十字链表两种表示。 图有一种重要的运算——遍历,即访问图中每个结点一次且仅一次。遍历的基本方法有两种:深度优先搜索DFS和广度优先搜索BFS。利用这两种图的遍历法可以解决一些实际问题,如求图的连通分量。 在现代管理中,常用图来描述和分析一项工程的计划及实施过程,也可以用图来说明某项任务的执行流程,即某个子任务或子工项在完成时间上的先后次序,在图结构中,这样的图称作AOV网,所用的算法是拓扑排序。AOV网选用邻接表作为网的存储结构。 习题8 8.1 图8-29所示为一个有向图,请给出: (1) 每个结点的入度、出度和总度; (2) 图的邻接矩阵; (3) 图的邻接表; (4) 图的逆邻接表; (5) 图的强连通分量。 图8-29 题8.1图 8.2 画出图8-30所示的无向图的邻接表,使得各结点在表头向量中的顺序按结点序号由小到大排列,邻接表中与各结点相邻接的所有结点在链表中的顺序也按由小到大的结点顺序排列,并且根据邻接表分别列出对该图进行深度和广度优先遍历时所得的结点序列。 图8-30 题8.2图

文档评论(0)

33qwer + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档