- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 图 6.1 图的概念 6.2 图的存储 6.2.1 邻接矩阵表示 6.2.2 邻接表表示 6.3 图的遍历 6.3.1 深度优先遍历 6.3.2 广度优先遍历 6.3.3 非连通图的遍历 6.4 生成树 6.5 最小生成树 6.5.1 Prim算法 6.5.2 Cruskal算法 6.6 最短路径 6.6.1 单源最短路径 6.7 有向无环图及其应用 6.7.1 AOV网与拓扑排序 6.7.2 AOE网与关键路径 0:1?1 ∞:1?2(无路径) 40:1?4?3 10:1?4 50:1?4?3?5 20:2?1 0:2?2 60:2?3 30:2?1?4 70:2?3?5 … 有向无环图(Directed Acyclic Graph或DAG):无回路的有向图 描述一项工程或系统进行过程: (1)整个工程能否顺利进行? (2)完成整个工程的最短时间是多少?哪些活动是影响整个工程进度关键? 例 某工程分为V1、V2、V3、V4、V5、V6、V7子工程,工程流程可用如下AOV网表示。其中, 顶点:表示子工程(活动), 弧:表示子工程间的顺序关系。 顶点活动网(Activity On Vertex network,AOV网):顶点表示活动,边表示活动之间先后关系的有向图 V6 V4 V3 V1 V2 V5 V7 例 课程流程图 某校计算机专业课程流程可AOV网表示。其中, 顶点:表示课程(活动), 弧:表示课程间的先修关系; c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 程序设计 离散数学 数据结构 汇编语言 算法分析 计算机体系 编译方法 操作系统 高等数学 线性代数 电子电路 数值分析 无 c1 c1,c2 c1 c3,c4 c11 c5,c3 c3,c6 无 c9 c9 c9,c10,c1 课程编号 课程名称 先决条件 c4 c1 c2 c3 c12 c9 c10 c11 c6 c7 c8 c5 一个可行施工计划:V1, V2, V3, V5, V4, V6, V7 一个可行学习计划:c1, c9, c4, c2, c10, c11, c12, c3, c6, c5, c7, c8 可行计划的特点:若在流程图中顶点v是顶点u 的前趋,则在计划序列中顶点v 也是u的前趋。 如何安排施工计划? 如何安排教学计划? V6 V4 V3 V1 V2 V5 V7 c4 c1 c2 c3 c12 c9 c10 c11 c6 c7 c8 c5 拓扑序列:有向图的一个顶点序列,满足:若顶点vi到vj有路径,则在序列中vi排在vj之前,否则vi与vj的次序任意。 拓扑排序: 就是将有向图中顶点排成拓扑序列。拓扑排序(Topological Sorting):构造拓扑序列的操作 并非任何有向图都可进行拓扑排序,若存在有向回路就没有。 有回路意味着:某些活动的开工将以自己的完成为先决条件,这种现象称为死锁,此项工程是不可行的。 可用拓扑排序检查有向图是否存在回路 void BFS(graph g,int v) { 初始化队列; 访问v;visited[v]=1; v入队; while(队不空) { v出队; 找v的第一个邻接点w; while(w存在) { if(w未访问过) { 访问w;visited[w]=1; w入队; } 求v的下一个邻接点w; } } } 先访问的点其邻点也先访问,“先进先出”,BFS算法中用队列保存已访问的顶点(不能像树那样保存待访问点?见课本) 1 2 3 4 5 6 7 Q V1 V8 V7 V6 V5 V4 V3 V2 V6 V5 V4 V3 V2 V1 V7 V8 V6 V5 V4 V3 V2 V1 V7 V8 void bfs(mat_graph *g,int v) { //邻接矩阵上BFS遍历 int j,n; sqqueue Q; //假设采用顺序队列 n=g?n; init_sqqueue(Q); coutv” ”;visited[v]=1; //访问出发点 en_sqqueue(Q,v); while(!empty_sqqueue(Q)) { de_sqqueue(Q,v); for(j=1;j=n;j++) if(g?adjmat[v][j]==1 !visited[
文档评论(0)