- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构:图
第七章 图 7.1 图的定义和术语 7.2 图的存储结构 7.2.1 数组表示法 7.2.2 邻接表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.3 最小生成树 7.5 有向无环图及其应用 7.5.1 拓扑排序 7.6 最短路径 7.6.1 从某个源点到其余各顶点的最短路径 7.6.2 每一对顶点之间的最短路径 深度优先遍历算法(递归算法) Boolean visited[MAX]; Status (*VisitFunc)(int v); void DFSTraverse(Gragh G, Status (*Visit)(int v)){ VisitFunc=Visit; for(v=0;vG.vexnum;++v)visited[v]=FALSE; for(v=0;vG.vexnum;++v)if(!visited[w]) DFS(G,v); } void DFS(Gragh G,int v) {visited[v]=TRUE;VisitFunc(v); for(w=FirstAdjVex(G.v);w=0;w=NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,W); } 广度优先遍历算法 void BFSTraverse(Graph G, Status(* Visit)(int v)){ for(v=0;vG.vexnum;++v) visited[v]=FALSE; InitQueue(Q); for(v=0;vG.vexnum;++v) if(!visited[v]){ visited[v]=TRUE;Visit(v); EnQueue(Q,v); while(! QueueEmpty(Q)){ DeQueue(Q,u); for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)) Visited[w]=TRUE;visit(w); EnQueue(Q,w); } } } } 求关键路径步骤: 求Ve(i) 求Vl(j) 求e(i) 求l(i) 计算l(i)-e(i) 问题提出 例: 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 6 5 4 3 2 1 2 3 4 5 方法二:克鲁斯卡尔(Kruskal)算法 算法思想: 1.设连通网N=(V,{E}),令最小生成树初始状态为只有 n个顶点而无边的非连通图T=(V,{?}),每个顶点自成一个连通分量。 2.在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最小的边。 3.依此类推,直至T中所有顶点都在同一连通分量上为止。 7.5 有向无环图及其应用 7.5.1 拓扑排序 问题提出:假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。如何检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。 什么是拓扑排序:把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程叫拓扑排序。 拓扑排序的方法:1.在有向图中选一个没有前驱的顶点且输出之。2.从图中删除该顶点和所有以它为尾的弧。3.重复上述两步,直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止。 例: 课程代号 课程名称 先修课 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 无 C1 C1,C2 C1 C3,C4 C11 C3.C5 C3,C6 无 C9 C9 C1,C9,C10 程序设计基础 离散数学 数据结构 汇编语言 语言设计和分析 计算机原理 编译原理 操作系统 高等数学 线性代数 普通物理 数值分析 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 拓扑序列: C1--C2--C3--C4--C5--C7--C9--C10--C11--C6--C12--C8 或 C9--C10--C11--C6--C1--C12--C4--C2--C3--C5--C7--C8一个AOV网的拓扑序列不是唯一的。 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 拓扑序列:C1 -- C2 --C3 --C8 --C4 --C5 --C7 --C9 --C10 --C11 --C6 --C12 算法实现: 1.以邻接表作存储结构。 2.把邻接表中所有入度为0的顶点进栈。 3.栈非空时,输出栈顶元素Vj并退栈;在邻接表中查找Vj的直接后继Vk,把Vk的入度减1;若Vk的入度为0则进栈。 4.重复上述操作
您可能关注的文档
- 数列极限动画演示.ppt
- 数列的解题方法.doc
- 数列通项公式与求和方法.doc
- 数字信号处理-第一章时域离散信号和时域离散系统.ppt
- 数字信号处理实验 基于Matlab.doc
- 数字信号处理课件、教程.ppt
- 数字信号处理课件 绪论.ppt
- 数字信号课程设计离散时间信号与系统的频域分析及其编程实现.doc
- 数字出版:呼唤开启竞合时代.ppt
- 数字化设计与制造的国内外发展现状及趋势.doc
- 2025年青岛酒店管理职业技术学院单招职业适应性测试题库必考题.docx
- 2025年青岛酒店管理职业技术学院单招职业倾向性测试题库推荐.docx
- 2025年青岛酒店管理职业技术学院单招职业倾向性考试题库推荐.docx
- 2025年青岛酒店管理职业技术学院单招职业倾向性考试题库最新.docx
- 2025年青岛酒店管理职业技术学院单招职业倾向性测试题库最新.docx
- 2024年文物保护工程从业资格题库附答案.docx
- 2025年职业资格——数控铣工技师模拟考试题库试卷.docx
- 2025年青岛酒店管理职业技术学院单招职业倾向性测试题库附答案.docx
- 2025年青岛远洋船员职业学院单招职业适应性考试题库推荐.docx
- 2025年青岛远洋船员职业学院单招职业适应性测试题库附答案.docx
文档评论(0)