- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章(图)数数据结构-(第二版)(C语言版)袁和金 著中国电力出版社(第二版)(袁和金 刘军)
邻接多重表 (Adjacency Multilist) 在邻接多重表中, 每一条边只有一个边结点。 无向图的情形 边结点的结构 顶点结点的结构 存储顶点信息的结点表以顺序表方式组织, 每一个顶点结点有两个数据域: data 存放与该顶点相关的信息, Firstout 是指示第一条依附该顶点的边的指针。 在邻接多重表中,所有依附于同一个顶点的边都链接在同一个单链表中。 从顶点i出发, 可以循链找到所有依附于该顶点的边,也可以找到它的所有邻接顶点。 有向图的情形 在用邻接表表示有向图时,有时需要同时使用邻接表和逆邻接表。用有向图的邻接多重表(十字链表)可把这两个表结合起来表示。 边结点的结构 顶点结点的结构 每个顶点有一个结点,它相当于出边表和入边表的表头结点:其中, 数据域data存放与该顶点相关的信息, Firstin指示以该顶点为头 (箭头端)的第一条边。 Firstout指示以该顶点为尾(出边端)的第一条边. 邻接多重表的结构 v1 v4 v3 v2 v6 v5 v7 v1 v5 v7 v3 v6 v2 v4 例 v4 v3 v2 v6 v7 v4 v3 v2 v6 v5 v7 v4 v3 v2 v7 v4 v3 v7 v4 v7 v7 有向图 为完成拓扑排序,采用如下邻接表为存储结构,此种链表可由计算机自动建立: V1 V2 V3 V4 V5 V6 0 2 1 2 3 0 ∧ ∧ 4 3 2 ^ 5 ^ 5 2 ^ 5 4 ^ 算法思想:建立一个栈(这个栈存放入度为0的结点)检查邻接表,将所有入度为零的顶点送栈,随后输出入度为0的顶点。Vj输出时 将Vj的直接后继Vk(k=1,2,,…)的入度减1,并将入度减到零的顶点进栈。当栈为空时,则检查一下是否输出了有向图的全部顶点(n个):若是,则排序结束;反之,则网中有环。 一个好的算法,一般在时空两个方面都应尽量的节约,对于拓扑排序算法,我们可以另开辟一块空间作为栈,还可以想办法利用它现有的存储空间,形成一个链栈。 while(top!=0) { j=top;top=g[top].in; //退栈 printf(“v%d”,j); m++; //输出顶点并计数 q=g[j].link; //q是指针,指示以j为尾的弧 算法如下: void toposort(AdjList g) //有向图g是邻接表存储,表头中每个分量有三个域data,next,in(入度),对入度为0的顶点设计链栈,top指示栈顶元素. { readlist(); //输入e条弧并建立邻接表 top=0; for(i=1;i=n;i++) //查入度为零的顶点,并建立链栈 if (g[i].in==0) {g[i].in=top;top=i;} m=0; //设m为计数器计算输出的顶点个数 while (q!=NULL) { k=q-adjvex; //顶点k为j的直接后继 g[k].in= g[k].in-1; //入度减1 if (g[k].in==0) {g[k].in=top; top=k; //入度为零的顶点进栈} q=q-next; } } if (mn) printf(“the network have cycle”); //输出顶点数不足n,说明网中有环 } 算法分析: 假设有向图有n个顶点,e条边,那么建立邻接表的执行时间为O(e);搜索入度为0的时间为O(n);在拓扑排序过程中,若有向图无环,则每个顶点进一次栈,入度减1的运算在WHILE top≠0的语句中共执行e次,所以总的执行时间为O(n+e)。 一.AOE网的定义 AOE网为一个带权的有向无环图,其中,顶点表示事 件,有向边表示活动,边上的权值表示活动持续的时间。 a4 v1 v4 v2 v3 v5 v7 v9 v8 v6 a1 a2 a3 a5 a6 a7 a8 a9 a10 a11 6 4 5 1 1 2 9 7 2 4 4 正常情况下,AOE网中只有一个入度为0 的顶点,称 之为源点;有一个出度为0 的顶点,称之为终点。 ★AOE网与关键路径 1.只有在某
文档评论(0)