版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、图的定义和术语2、图的存储结构3、图的遍历4、图的连通性问题5、有向无环图及其应用6、最短路径,第7章 图,2020/9/19,2,1数据的逻辑结构,2、数据的存储结构,3、数据的运算:检索、排序、插入、删除、修改等。,A线性结构,B非线性结构,A 顺序存储,B 链式存储,线性表,栈,队,树形结构,图形结构,数据结构的三个方面,图的定义和术语,A,B,C,D,A,B,C,D,E,有向图 G1,无向图 G2,结点或 顶点:,有向边(弧)、弧尾或初始结点、弧头或终止结点,A,B,A,B,有向图:G1 =(V1,A1) V1 = A,B,C,D A1 = , , , ,结点或 顶点:,无向边或边
2、,A,B,无向图:G2 =(V2,A2) V2 = A,B,C,D,E A2 = (A,B), (A,C),(B,D), (B,E, (C,E),(D,E),A,B,图的定义和术语,A,B,C,D,无向图 G2,A,B,C,D,A,C,A,B,C,D,有向图G1的子图,A,B,C,D,E,A,B,D,E,A,A,B,C,D,A,B,C,D,E,无向图G2的子图,有向图 G1,图的定义和术语,无向图的连通性,A,B,C,D,E,路径:在无向图G=(V,E)中由顶点v至v 的顶点序列。 回路或环:第一个顶点和最后一个顶点相同的路径。 简单回路或简单环:除第一个顶点和最后一个顶点之外,其余顶点不重复
3、出现的回路。 连通:顶点v至v 之间有路径存在 连通图:无向图图 G 的任意两点之间都是连通的,则称 G 是连通图。 连通分量:极大连通子图,F,G,I,J,L,H,M,K,A,B,C,D,E,H,M,F,G,I,J,L,K,无向图G,无向图G的三个连通分量,图的定义和术语,有向图的连通性,路径:在有向图G=(V,E)中由顶点v经有向边至v 的顶点序列。 回路或环:第一个顶点和最后一个顶点相同的路径。 简单回路或简单环:除第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路。 连通:顶点v至v 之间有路径存在 强连通图:有向图图 G 的任意两点之间都是连通的,则称 G 是强连通图。 强连通分
4、量:极大连通子图,有向图G,有向图G的两个强连通分量,A,B,C,D,A,B,C,D,图的定义和术语,生成树:极小连通子图。包含图的所有 n 个结点,但只含图的 n-1 条边。在生成树中添 加一条边之后,必定会形成回路或环,但是含有n-1条边的图不一定是生成树,A,B,C,D,E,H,M,A,B,C,D,E,H,M,无向图G,无向图G的生成树,有向图的生成树:有若干个有向树组成,含有图中的全部 顶点,但是构成若干个互不相交的有向树,图的定义和术语,完全 图:有 n(n-1)/2 条边的无向图。其中 n 是结点个数。 有向完全图:有 n(n-1) 条边的有向图。其中 n 是结点个数。 边的权值,
5、边有权的图称之为网络。 邻接点:边用顶点的无序偶对(vi, vj)来表示,称顶点vi和顶点vj互为邻接点 稠密图、稀疏图。若一个图接近完全图,称为稠密图;称边数很少的图为稀疏图 无向图结点的度:指依附于某顶点v的边数 记为TD (v) 有向图结点的出度和入度 :顶点v的入度是指以顶点 为终点的弧的数目。记为ID (v),A,B,C,D,E,H,M,无向图G1,图的其它术语,有向图G2,A,B,C,D,有向图顶点v出度 是指以顶点v为 始点的弧 的数目, 记为OD (v)。 有 TD (v)=ID (v)OD (v)。,n个顶点的 图中顶点度 和边的关系,图的存储结构,图的四种常用的存储形式:
6、数组表示法(邻接矩阵和加权邻接矩阵 matrix) 邻接表 十字链表 邻接多重表,1、邻接矩阵和加权邻接矩阵(labeled adjacency matrix),A,B,C,D,无权值的有向图的邻接矩阵 设有向图具有 n 个结点,则用 n 行 n 列的布尔矩阵 A 表示该有向图; 并且 Ai,j = 1 , 如果i 至 j 有一条有向边;Ai,j = 0如果 i 至 j 没有一条有向边 注意: Ai,i = 0。出度: i行之和。入度: j列之和。,表示成右图矩阵,0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0,2020/9/19,10,邻接矩阵表示法对求顶点的度很方便。,在无
7、向图中: 顶点的度数=矩阵中对应该顶点的行或列中非零元素的个数。,在有向图中: 顶点的出度=矩阵中对应该顶点的行中非零元素的个数。 顶点的入度=矩阵中对应该顶点的列中非零元素的个数。,2020/9/19,11,V1 V2 V3 V4 V1 0 0 1 0 V2 0 0 0 1 V3 0 0 0 1 V4 1 0 0 0,V1 V2 V3 V4 V1 0 1 1 1 V2 1 0 0 1 V3 1 0 0 0 V4 1 1 0 0,入度 出度,1 1,1 1,2 1,0 1,度数,3,2,1,2,图的存储结构,1、邻接矩阵和加权邻接矩阵(labeled adjacency matrix)(续),
8、无权值的无向图的邻接矩阵 设无向图具有 n 个结点,则用 n 行 n 列的布尔矩阵 A 表示该无向图; 并且 Ai,j = 1 , 如果i 至 j 有一条无向边;Ai,j = 0如果 i 至 j 没有一条无向边 注意: Ai,i = 0。i结点的度: i行或i列之和。上三角矩阵或下三角矩阵。,表示成右图矩阵,0 1 1 0 0 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 0 1 1 1 0,A,B,C,D,E,图的存储结构,1、邻接矩阵和加权邻接矩阵(labeled adjacency matrix)(续),有向图的加权邻接矩阵 设有向图具有 n 个结点,则用 n 行 n 列的
9、矩阵 A 表示该有向图; 并且 Ai,j = a , 如果i 至 j 有一条有向边且它的权值为a。Ai,j =无穷,如果 i 至 j 没有一条有向边。,A,B,C,D,表示成右图矩阵, a b b b a a ,a,a,a,b,b,b,优点:判断任意两点之间是否有边方便,仅耗费 O(1) 时间。 缺点:即使 n2 条边,也需内存 n2 /2 单元,太多; 仅读入数据耗费 O( n2 ) 时间,太长。,A B C D,A B C D,图的存储结构,2、邻接表(adjacency list),设有向图或无向图具有 n 个结点,则用 结点表、边表表示该有向图或无向图。 结点表:用数组或单链表的形式存
10、放所有的结点。如果结点数n已知,则采用数 组形式,否则应采用单链表的形式。 边表(边结点表):每条边用一个结点进行表示。同一个结点的所有的边形成 它的边结点单链表。 优点:内存 结点数 边数 缺点:确定 i - j 是否有边,最坏需耗费 O(n) 时间。无向图同一条边表示两次 边表空间浪费一倍。有向图中寻找进入某结点的边,非常困难。,data,firstarc,结点表中的结点的表示: 用数组,data:结点的数据场,保存结点的数据值。 firstarc:结点的指针场,给出自该结点出发的 的第一条边的边结点的地址。,图的存储结构,2、邻接表(adjacency list),data,firsta
11、rc,结点表中的结点的表示:续 用单链表,data:结点的数据场,保存结点的 数据值。 firstarc:结点的指针场,给出自该 结点出发的的第一条边的 边结点的地址。 nextvex:结点的指针场,给出该结 点的下一结点的地址。,nextvex,info,adjvex,nextarc,边结点表中的结点的表示:,info:边结点的数据场,保存边的 权值等。 adjvex:边结点的指针场,给出本 条边依附的另一结点(非 出发结点)的地址。 nextarc:结点的指针场,给出自该 结点出发的的下一条边的 边结点的地址。,图的存储结构,2、邻接表(adjacency list),实例:,A,B,C,
12、D,无向图 G2,A,B,C,D,E,向图 G1,A,B,C,D,1,2,0,3,0123,null,null,null,null,data firstarc,adjvex nextvex,A,B,1,2,01234,null,data firstarc,0,3,0,4,1,4,1,2,C,D,E,4,3,null,null,null,null,Adjvex 指针场之值为相应结点 数的组元素的下标!,六条边却用了 12 个边结点! 改进:建立邻接多重表,寻找进入结点的边非常困难! 改进:建立逆邻接表或十字链表,adjvex nextvex,图的存储结构,2、邻接表(adjacency list
13、),逆邻接表实例:,A,B,C,D,有向图 G1,A,B,3,2,0123,l,0,0,2,C,D,图的存储结构,3、十字链表,data,firstin,firstout,info,tailvex,headvex,边结点表中的结点的表示:,结点表中的结点的表示:,data:结点的数据域,保存结点的 数据值。 firstin: 结点的指针域,给出自该 结点出发的的第一条边的 边结点的地址。 firstout:结点的指针域,给出进入该 结点的第一条边的 边结点的地址。,info:边结点的数据域,保存边的 权值等。,hlink,tlink,tailvex: 本条边的出发结点 的地址。 headvex
14、:本条边的终止结点 的地址。,hlink:出发结点相同的边 中的下一条边的地址。 tlink:终止结点相同的边 中的下一条边的地址。,图的存储结构,3、十字链表,实例:,A,B,C,D,向图 G1,0 1 2 3,A,B,C,D,0,1,0,2,2,2,2,0,0,3,3,3,3,1,data,firstin,firstout,tailvex,headvex,hlink,tlink,用途:用于有向图, 查询 进入结点和离开结点 的边容易。,图的存储结构,4、邻接多重表,data,firstedge,mark,ivex,ilink,边结点表中的结点的表示:,结点表中的结点的表示:,data:结点
15、的数据域,保存结点的 数据值。 firstedge: 结点的指针域,给出自该 结点出发的的第一条边的 边结点的地址。,info: 边结点的数据域,保存边的 权值等。 mark:边结点的标志域,用于标识 该条边是否被访问过。,jvex,info,ivex: 本条边依附的一 个结点的地址。 ilink: 依附于该结点(地 址由ivex给出)的 边中的下一条边的 的地址。,jlink,jvex: 本条边依附的另 一个结点的地址。 jlink: 依附于该结点(地 址由jvex给出)的 边中的下一条边的 的地址。,图的存储结构,4、邻接多重表,实例:,无向图 G2,用途:用于无向图,边表中 的边结点只需
16、存放一 次,节约内存。,A,B,C,D,E,A,B,01234,data firstedge,C,D,E,0,1,2,4,4,1,3,1,0,2,3,4,mark,ivex,ilink,jvex,jlink,2020/9/19,22,练习:给出下图的1)邻接矩阵、2)邻接表和3)十字链表表表示,0 1 2 3 4 5,1),2)邻接表要求出和入边两种,2020/9/19,23,(二)给出右图的邻接多重表,图的遍历,图的遍历:是指从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次 图的2种常见的遍历形式:1)深度优先搜索 2)广度(或宽度)优先搜索,1、深度优先搜索 注意:每个结点只能被
17、访问一次,又因为一个结点可以和其它的任何结点相邻接, 为了避免对一个结点的重复访问,必须对访问过的结点加以标记。 结点的邻接结点的次序是任意的,因此深度优先搜索的序列可能有多种。 深度优先搜索类似于树的先序遍历。 访问方式:1、选中第一个被访问的结点。 2、对结点作已访问过的标志。 3、依次从结点的未被访问过的第一个、第二个、第三个 邻接结 点出发,进行深度优先搜索。转向2。 4、如果还有顶点未被访问,则选中一个起始结点,转向2。 5、所有的结点都被访问到,则结束。,图的遍历,1、深度优先搜索:续 有向图的实例:为了说明问题,邻接结点的访问次序以序号为准。序号小的先访问。 如: 结点 5 的邻
18、接结点有两个 6、7,则先访问结点 6,再访问结点 7。,5,6,7,2,4,1,3,5,6,7,2,3,1,4,从结点 出发的搜索序列: 5、6、2、3、1、4、7 适用的数据结构:栈,5,1,2,4,3,从结点 出发的搜索序列: 1、2、3、4没有搜索 到所有的结点,必 须另选图中未访 问过的结点, 继续进行 搜索。,1,图的遍历,1、深度优先搜索:续 搜索的实现。,使用的变量说明:Boolean visitedMAX ; /用于标识结点是否已被访问过 Status ( * VisitFunc) (int v); /函数变量,void DFSTraverse( Graph G, Statu
19、s ( * VisitFunc) (int v); VisitFunc = Visit; for ( v=0; v G.vexnum; +v ) visitedv = false; for ( v=0; v G.vexnum; +v ) if ( ! Visited v ) DFS(G, v ) ,void DFS( Graph G, int v ); Visitedv = true; VisitFunc(v); for ( w = FirstAdjVex(G, v) ; w ; w = NextAdjVex(G, v, w) ) if ( ! Visited w ) DFS(G, w ) ,
20、时间复杂性: 邻接矩阵: O(n2) 邻接表 O(n + e) n:结点数 e:边数,图的遍历,2、广度(宽度)优先搜索 注意:每个结点只能被访问一次,又因为一个结点可以和其它的任何结点相邻接, 为了避免对一个结点的重复访问,必须对访问过的结点加以标记。 结点的邻接结点的次序是任意的,因此广度优先搜索的序列可能有多种。 广度优先搜索类似于树的从根出发的按层次遍历。 访问方式:1、选中第一个被访问的结点 V 2、对结点 V 作已访问过的标志。 3、依次从结点 V 的未被访问过的第一个、第二个、第三个第 M个 邻接结点 W1 、W2、W3 Wm ,且进行标记。 4、依次访问结点 W1 、W2、W3
21、 Wm的邻接结点,且进行标记。 5、如果还有结点未被访问,则选中一个起始结点,也标记为V,转向2。 6、所有的结点都被访问到,则结束。,图的遍历,队列的变化:,2、广度(宽度)优先搜索:,A,B,C,D,E,F,G,H,I,J,K,L,树的按层次进行访问的次序: A、B、C、D、E、F、G、H、 I、J、K、L 适用的数据结构:队列,树:,A,B,C,D,1、结点A进队,2、结点A出队、访问,队空 3、结点A的儿子结点进队 4、结点B出队、访问 5、结点B的儿子结点进队 6、结点C出队、访问 7、结点C的儿子结点进队, ,C,D,E,F,G,C,D,E,F,G,D,E,F,G,D,H,图的遍历
22、,无向图的实例:为了说明问题,邻接结点的访问次序以序号为准。序号小的先访问。如: 结点 1 的邻接结点有三个 2、12、11,则先访问结点 2、11,再访问结点 12。,2、广度(宽度)优先搜索:,图的广度优先的访问次序: 1、2、11、12、3、6、7、10、4、5、8、9 适用的数据结构:队列,1,2,12,11,3,6,7,10,4,5,8,9,1,2,12,11,3,6,7,10,4,5,8,9,图的遍历,2、广度优先搜索:续,使用的变量说明:Boolean visitedMAX ; /用于标识结点是否已被访问过 Status ( * VisitFunc) (int v); /函数变量,void BFSTraverse( Graph G, Status ( * VisitFunc) (int v); VisitFunc = Visit; for ( v=0; v G.vexnum; +v ) visitedv = FALSE; InitQueue(Q); for ( v=0; v G.vexn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年CATTI二级笔译《实务》真题及答案
- 2026年民航飞机监护员考试题及答案
- 电力电缆隧道施工安全技术交底记录
- 2026年锅炉检修工中级工(四级)职业技能鉴定考试题库(含实操)
- 通过成语教学介绍中国文化
- 2026年深圳市户外运动装备天使轮融资加盟扩张方案
- 2026智能斑马帘电机市场洗牌:价格战后的品牌分化格局
- 线段和长短比较课件
- 程序控制结构习题C语言程序设计
- 证券投资于财务分析概论效率市场与投资组合理论
- 机器人中小学科普
- 气瓶检验知识培训心得
- 盘式制动器拆装课件
- 塑胶-塑胶件控制计划
- DBJT15-189-2020 广东省公共厕所设计标准
- 大数据与财务管理专业教学标准(高等职业教育本科)2025修订
- 辽宁省病历书写基本规范
- 环境科学与工程专业职业生涯规划书4100字数
- T/CECS 10209-2022给水用高环刚钢骨架增强聚乙烯复合管材
- (中级)四级有机合成工职业技能鉴定理论考试题库(含答案)
- 暖气维修施工方案
评论
0/150
提交评论