- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五章 图 图的基本概念 图的存储表示 图的遍历 最小生成树 最短路径 第五章 图 图的应用 路径搜索 最短路径 第五章 图 图是由顶点集合V(Vertex)及顶点间的关系集合VR组成的一种数据结构 有向图 无向图 第五章 图 有向图 弧: v,w v为弧尾或初始点,w为弧头或终端点 无向图 边: (v,w) 第五章 图 权 与图的边(弧)相关的数值 网络 带有权的图 第五章 图 完全图 n个顶点 无向图: 有向图: 边/弧的数量达到最大值 第五章 图 子图 有两个图G={V,{E}},G’={V’,{E’}} 如果V’?V, E’?E,则称G’为G的子图 第五章 图 度 顶点v的度TD(V)=和v相关联的边的数目 第五章 图 入度和出度 有向图 入度ID(v)=以顶点v为头的弧的数目 出度OD(v)=以顶点v为尾的弧的数目 TD(V)=ID(v)+OD(v) 第五章 图 第五章 图 思考 入度与出度的关系? 个有n个顶点,e条边或弧的图满足: 第五章 图 连通图(无向图) 任意两个顶点vi和vj都是连通的 连通图:N 个顶点,至少n-1条边 第五章 图 连通分量 无向图中的极大连通子图 第五章 图 生成树 一个连通图的包含所有顶点的极小连通子图 第五章 图 理解 “包含所有顶点”:顶点一个都不能少 “极小”:那只能让边尽量少了 “连通”:但是又不能太少 第五章 图 生成树 有n个顶点 有n-1条边 生成树唯一么? 不唯一 第五章 图 强连通图(有向图) 在有向图G中,如果每一对vi,vj (vi?vj),都存在从vi到vj(vj到vi)的路径,则称G为强连通图 强连通分量:极大强连通子图 第五章 图 图的存储结构 数组表示法(邻接矩阵) 无向图的邻接表 第五章 图 数组表示法(邻接矩阵) 顶点表:记录各个顶点的信息 邻接矩阵:表示各个顶点之间的关系 第五章 图 第五章 图 有向图 统计第i行中“1”的个数可得顶点i的出度 统计第j列中“1”的个数可得顶点j的入度 第五章 图 无向图的邻接矩阵是对称的 在无向图中,统计第i行(列)“1”的个数可得顶点i的度 第五章 图 无向图的邻接表 链式存储结构 每个顶点建立一个单链表 由头结点与表结点构成 表结点:跟当前头结点相连的另一个顶点 第五章 图 无向图的邻接表 第五章 图 无向图 某个头结点后面链接的表结点的个数就是该顶点的度 有向图 邻接表的某个头结点后面链接的表结点的个数就是该顶点的出度 第五章 图 思考 已知邻接表/邻接矩阵,如何画出图 第五章 图 图的遍历 深度优先遍历 广度优先遍历 第五章 图 深度优先遍历 访问顶点v 依次从v的每一个未被访问的邻接点出发进行深度优先遍历 若此时图中尚有顶点未被访问,则任选其一为起点 重复,直至图中所有顶点都被访问到 第五章 图 第五章 图 广度优先遍历 访问顶点v 依次访问顶点v的各个未被访问的邻接点 第五章 图 分别从这些邻接点出发,依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问 若此时图中尚有顶点未被访问,则任选其一为起点,重复,直至图中所有顶点都被访问到 第五章 图 第五章 图 练习 写出对下图进行深度优先遍历和广度优先遍历的结果 第五章 图 应用:连通n个城市的需要多少条道路? 最多n(n-1)/2:任何两个城市之间都修一条路 最少n-1,问题是哪n-1条能使总代价最小呢? 第五章 图 最小生成树 各边权值之和最小的生成树 第五章 图 Prim(普里姆)算法 U为最小生成树中顶点的集合 初始时,U={u0} 从剩下的顶点中找到一个离U最近的直接相连的顶点v,把它加入U 重复,直到所有的顶点都加入到U中 第五章 图 第五章 图 第五章 图 第五章 图 第五章 图 第五章 图 第五章 图 Kruskal(克鲁斯卡尔)算法 找到图中权最小的一条边,加入生成树 再在剩下的边中找到权最小的,加入 ... 不过要求不能产生回路 第五章 图 第五章 图 第五章 图 第五章 图 第五章 图 最短路径问题 从一个顶点出发,求出去往其它所有顶点的最短路径及其长度 Dijkstra算法 第五章 图 算法 数据结构 S = Set:已知最短路径的目的顶点集合 D = Distance:起点到终点的距离 初始化 S = {V0} 对于所有顶点v 若存在弧V0,V,D(v) = arcs(V0,V) 否则 D(v) = ∞ 第五章 图 循环 在不在S中(V-S)的顶点中查找D(w)最小的顶点w 把w加入S,即w为已知最短路径 更新w的所有邻接点v的D(v) if( D(w)+arcs(w,v) D(v) ) D(v) = D(w)+arcs(w,v); 循环,直到所有顶点都加入S V1-V
文档评论(0)