数据结构第7章最新图.pptVIP

  • 2
  • 0
  • 约2.77万字
  • 约 125页
  • 2017-06-05 发布于四川
  • 举报
AOV-网的特性如下: · 若vi为vj的先行活动,vj为vk的先行活动,则vi必为vk的先行活动,即先行关系具有可传递性。从离散数学的观点来看,若有vi, vj、 vj, vk,则必存在vi, vk。 显然,在AOV-网中不能存在回路,否则回路中的活动就会互为前驱,从而无法执行。  · AOV-网的拓扑序列不是唯一的。  例如,图7.21的另一个拓扑序列为:C1, C2, C3, C8, C4, C5, C9, C7, C6。 拓扑排序的基本思想为:  (1) 从有向图中选一个无前驱的顶点输出;  (2) 将此顶点和以它为起点的弧删除;  (3) 重复(1)、(2),直到不存在无前驱的顶点; (4) 若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在回路,否则输出的顶点的顺序即为一个拓扑序列。  图7.22 AOV-网 例如,对于图7.22所示的AOV-网,执行上述过程可以得到如下拓扑序列: v1,v6,v4,v3,v2,v5 或 v1,v3,v2,v6,v4,v5 基于邻接表的存储结构 入度为零的顶点即为没有前驱的顶点, 我们可以附设一个存放各顶点入度的数组indegree[],于是有 (1)找G中无前驱的顶点——查找indegree[i]为零的顶点vi; (2)删除以i为起点的所有弧——对链在顶点i后面的所有邻接顶点k,将对应的indegree[k] 减1。  为了避免重复检测入度为零的顶点,可以再设置一个辅助栈,若某一顶点的入度减为0,则将它入栈。每当输出某一入度为0的顶点时,便将它从栈中删除。 Status TopologicalSort(ALGraph G){ FindInDegree(G,indegree); //求得每个顶点的入度 InitStack(S); //初始化一个栈 for(i=0;iG.vexnum;i++) //建入度为0的顶点进栈 if(!indegree[i]) Push(S,i); count=0; //对输出顶点计数 while(!StackEmpty(S)){ Pop(S,i); printf(i,G.vertices[i].data); count++; for(p=G.vertices[i].firstarc; p; p=p-nextarc){ k=p-adjvex; //对i号顶点的每个邻接点入度减1 if(!(--indegree[k])) Push(S,k); //若入度减为0,则入栈 } } if(countG.vexnum) return ERROR; else return OK; } 7.5.2 关键路径 有向图在工程计划和经营管理中有着广泛的应用。通常用有向图来表示工程计划时有两种方法:  · 用顶点表示活动,用有向弧表示活动间的优先关系,即上节所讨论的AOV-网。 · 用顶点表示事件,用弧表示活动,弧的权值表示活动所需要的时间。  我们把用第二种方法构造的有向无环图叫做边表示活动的网(Activity On Edge Network), 简称AOE-网。 AOE-网在工程计划和管理中很有用。在研究实际问题时,人们通常关心的是: · 哪些活动是影响工程进度的关键活动? · 至少需要多长时间能完成整个工程?  在AOE网中存在唯一的、入度为零的顶点,叫做源点;存在唯一的、出度为零的顶点,叫做汇点。从源点到汇点的最长路径的长度即为完成整个工程任务所需的时间,该路径叫做关键路径。关键路径上的活动叫做关键活动。这些活动中的任意一项活动未能按期完成,则整个工程的完成时间就要推迟。相反,如果能够加快关键活动的进度,则整个工程可以提前完成。 图7.24 AOE-网 · 事件vi的最早发生时间ve(i):从源点到顶点vi的最长路径的长度,叫做事件vi的最早发生时间。这个时间决定了所有以vi为尾的弧所表示的活动的最早开始时间。求ve(i)时可从源点开始,按拓扑顺序向汇点递推:  ve(0)=0;  ve(i)

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档