数据结构(严蔚敏)课件第7章.ppt
《数据结构(严蔚敏)课件第7章.ppt》由会员分享,可在线阅读,更多相关《数据结构(严蔚敏)课件第7章.ppt(113页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章图图3/7/20231【课前思考】【课前思考】1.同学们有没有发现现在的十字路口的交通灯已从过去的一对改为三对,同学们有没有发现现在的十字路口的交通灯已从过去的一对改为三对,即每个方向的直行、左拐和右拐能否通行都有相应的交通灯指明。你能否即每个方向的直行、左拐和右拐能否通行都有相应的交通灯指明。你能否对某个丁字路口的对某个丁字路口的6条通路画出和第一章绪论中介绍的条通路画出和第一章绪论中介绍的五叉路口交通管理五叉路口交通管理示意图示意图相类似的图?相类似的图?同学们一定可以画出如下所示类似的图形。2.如果每次让三条路同时通行,那么从图看出哪些路可以同时通行?如果每次让三条路同时通行
2、,那么从图看出哪些路可以同时通行?同时可通行的路为:(AB,BC,CA),(AB,BC,BA),(AB,AC,CA),(CB,CA,BC)3/7/20232【学习目标】【学习目标】1领会图的类型定义。2熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则。3熟练掌握图的两种遍历算法。4理解各种图的应用问题的算法。3/7/20233【重点和难点】【重点和难点】图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。【知识点】【知识点】图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、
3、拓扑排序、关键路径。3/7/20234【学习指南】【学习指南】离散数学中的图论是专门研究图性质的一个数学分离散数学中的图论是专门研究图性质的一个数学分支,但图论注重研究图的纯数学性质,而数据结构中对支,但图论注重研究图的纯数学性质,而数据结构中对图的讨论则侧重于在计算机中如何表示图以及如何实现图的讨论则侧重于在计算机中如何表示图以及如何实现图的操作和应用等。图是较线性表和树更为复杂的数据图的操作和应用等。图是较线性表和树更为复杂的数据结构,因此和线性表、树不同,虽然在遍历图的同时可结构,因此和线性表、树不同,虽然在遍历图的同时可以对顶点或弧进行各种操作,但更多图的应用问题如求以对顶点或弧进行各
4、种操作,但更多图的应用问题如求最小生成树和最短路径等在图论的研究中都早已有了特最小生成树和最短路径等在图论的研究中都早已有了特定算法,在本章中主要是介绍它们在计算机中的具体实定算法,在本章中主要是介绍它们在计算机中的具体实现。这些算法乍一看都比较难,应多对照具体图例的存现。这些算法乍一看都比较难,应多对照具体图例的存储结构进行学习。而图遍历的两种搜索路径和树遍历的储结构进行学习。而图遍历的两种搜索路径和树遍历的两种搜索路径极为相似,应将两者的算法对照学习以便两种搜索路径极为相似,应将两者的算法对照学习以便提高学习的效果。提高学习的效果。本章必须完成的算法设计题为本章必须完成的算法设计题为:7.
5、7,7.9,7.10,7.12,7.14,7.15,7.223/7/202357.1 图的定义与术语图的定义与术语7.2 图的存储表示图的存储表示7.3 图的遍历图的遍历7.4 最小生成树最小生成树7.5 重(双)连通图和关节点重(双)连通图和关节点7.6 两点之间的最短路径问题两点之间的最短路径问题7.7 拓扑排序拓扑排序7.8 关键路径关键路径3/7/20236 图图是由一个是由一个顶点集顶点集 V 和一个和一个弧集弧集 R构成构成的数据结构。的数据结构。Graph=(V,VR)其中,VR|v,wV 且 P(v,w)表示从 v 到 w 的一条弧,并称 v 为弧头弧头,w 为弧尾弧尾。谓词
6、P(v,w)定义了弧 的意义或信息。图的结构定义图的结构定义:7.1 图的定义与术语图的定义与术语3/7/20237 由于“弧”是有方向的,因此称由顶点集和弧集构成的图为有向图有向图。AB E C D例如例如:G1=(V1,VR1)其中V1=A,B,C,D,EVR1=,3/7/20238若VR 必有VR,则称(v,w)为顶点v 和顶点 w 之间存在一条边边。B CA D F E由顶点集和边集构成的图称作无向图无向图。例如:G2=(V2,VR2)V2=A,B,C,D,E,FVR2=(A,B),(A,E),(B,E),(C,D),(D,F),(B,F),(C,F)3/7/20239名词和术语名词和
7、术语网、子图 完全图、稀疏图、稠密图邻接点、度、入度、出度路径、路径长度、简单路径、简单回路连通图、连通分量、强连通图、强连通分量生成树、生成森林3/7/202310ABECFAEFBBC设图G=(V,VR)和图 G=(V,VR),且 VV,VRVR,则称 G 为 G 的子图子图。1597211132 弧或边带权的图分别称作有向网有向网或无向网无向网。C3/7/202311假设图中有 n 个顶点,e 条边,则 含有 e=n(n-1)/2 条边的无向图称作完全图完全图;含有 e=n(n-1)条弧的有向图称作 有向完全图有向完全图;若边或弧的个数 enlogn,则称作稀疏图稀疏图,否则称作稠密图稠
8、密图。3/7/202312 假若顶点v 和顶点w 之间存在一条边,则称顶点v 和w 互为邻接点邻接点,ACDFE例如例如:ID(B)=3ID(A)=2 边(v,w)和顶点v 和w 相关联关联。和顶点v 关联的边的数目边的数目定义为顶点v的度度。B3/7/202313顶点的出度出度:以顶点v为弧尾的弧的数目;ABECF对有向图来说对有向图来说,顶点的入度入度:以顶点v为弧头的弧的数目。顶点的度度(TD)=)=出度出度(OD)+)+入度入度(ID)例如例如:ID(B)=2OD(B)=1TD(B)=33/7/202314设图G=(V,VR)中的一个顶点序列 u=vi,0,vi,1,vi,m=w中,(
9、vi,j-1,vi,j)VR 1jm,则称从顶点u 到顶点w 之间存在一条路径路径。路径上边(或弧)的数目称作路径长度路径长度。ABECF如如:长度为3的路径A,B,C,F简单路径简单路径:序列中顶点不重复出现的路径。简单回路简单回路:序列中第一个顶点和最后一个顶点相同的路径而其余顶点不重复。3/7/202315若图G中任意两个顶点之间都有路径相通,则称此图为连通图连通图;若无向图为非连通图,则图中各个极大连通子图称作此图的连通连通分量分量。BACDFEBACDFE3/7/202316 若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图强连通图。ABECFABECF对有向图,对有向图
10、,否则,其各个强连通子图称作它的强连通分量强连通分量。3/7/202317 假设一个连通图有 n 个顶点和 e 条边,其中 n-1 条边和 n 个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树生成树。对非连通图,则称由各个连通分量的生成树的集合为此非连通图的生成森林生成森林。BACDFE3/7/202318结构的建立和销毁结构的建立和销毁插入或删除顶点插入或删除顶点对邻接点的操作对邻接点的操作对顶点的访问操作对顶点的访问操作遍历遍历插入和删除弧插入和删除弧基本操作基本操作3/7/202319CreatGraph(&G,V,VR):/按定义(V,VR)构造图DestroyGraph
11、(&G):/销毁图结构的建立和销毁结构的建立和销毁3/7/202320对顶点的访问操作对顶点的访问操作LocateVex(G,u);/若G中存在顶点u,则返回该顶点在/图中“位置位置”;否则返回其它信息。GetVex(G,v);/返回 v 的值。PutVex(&G,v,value);/对 v 赋值value。3/7/202321对邻接点的操作对邻接点的操作FirstAdjVex(G,v);/返回 v 的“第一个邻接点第一个邻接点”。若该顶点/在 G 中没有邻接点,则返回“空”。NextAdjVex(G,v,w);/返回 v 的(相对于 w 的)“下一个邻接下一个邻接/点点”。若 w 是 v 的
12、最后一个邻接点,则/返回“空”。3/7/202322插入或删除顶点插入或删除顶点InsertVex(&G,v);/在图G中增添新顶点v。DeleteVex(&G,v);/删除G中顶点v及其相关的弧。3/7/202323插入和删除弧插入和删除弧InsertArc(&G,v,w);/在G中增添弧,若G是无向的,/则还增添对称弧。DeleteArc(&G,v,w);/在G中删除弧,若G是无向的,/则还删除对称弧。3/7/202324遍遍 历历DFSTraverse(G,v,Visit();/从顶点v起深度优先深度优先遍历图G,并对每/个顶点调用函数Visit一次且仅一次。BFSTraverse(G,
13、v,Visit();/从顶点v起广度优先广度优先遍历图G,并对每/个顶点调用函数Visit一次且仅一次。3/7/2023257.2 图的存储表示图的存储表示一、一、图的数组(邻接矩阵)存储表示二、图的邻接表存储表示三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示3/7/202326Aij=0 (i,j)VR1 (i,j)VR一、一、图的数组(邻接矩阵)存储表示BACDFE定义定义:矩阵的元素为矩阵的元素为3/7/202327有向图的邻接矩阵有向图的邻接矩阵为非对称矩阵为非对称矩阵ABECF3/7/202328typedef struct ArcCell /弧的定义弧的定义 VRTy
14、pe adj;/VRType是顶点关系类型。/对无权图,用1或0表示相邻否;/对带权图,则为权值类型。InfoType *info;/该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_NUM MAX_VERTEX_NUM;3/7/202329typedef struct /图的定义图的定义 VertexType /顶点信息 vexsMAX_VERTEX_NUM;AdjMatrix arcs;/弧的信息 int vexnum,arcnum;/顶点数,弧数 GraphKind kind;/图的种类标志 MGraph;3/7/2023300 A 1 41 B 0 4 52
15、C 3 53 D 2 54 E 0 15 F 1 2 3BACDFE二、图的邻接表二、图的邻接表 存储表示存储表示3/7/2023311 4230 120 1 2 3 4 A B C D E有向图的邻接表有向图的邻接表ABECD可见,在有向图的邻接表中不易找到指向该顶点的弧。3/7/202332ABECD有向图的逆邻接表有向图的逆邻接表A B C D E 303420 01234在有向图的邻接表中,对每个顶点,链接的是指向该顶点的弧。3/7/202333typedef struct ArcNode int adjvex;/该弧所指向的顶点的位置 struct ArcNode *nextarc;
16、/指向下一条弧的指针 InfoType *info;/该弧相关信息的指针 ArcNode;adjvex nextarc info弧的结点结构弧的结点结构3/7/202334typedef struct VNode VertexType data;/顶点信息 ArcNode *firstarc;/指向第一条依附该顶点的弧 VNode,AdjListMAX_VERTEX_NUM;data firstarc顶点的结点结构顶点的结点结构3/7/202335typedef struct AdjList vertices;int vexnum,arcnum;int kind;/图的种类标志 ALGraph
17、;图的结构定义图的结构定义3/7/202336三、有向图的十字链表存储表示三、有向图的十字链表存储表示 弧的结点结构弧的结点结构弧尾顶点位置 弧头顶点位置 弧的相关信息指向下一个有相同弧尾有相同弧尾的结点指向下一个有相同弧头有相同弧头的结点typedef struct ArcBox /弧弧的结构表示的结构表示 int tailvex,headvex;InfoType *info;struct ArcBox *hlink,*tlink;VexNode;3/7/202337顶点的结点结构顶点的结点结构顶点信息数据 指向该顶点的第一条入弧第一条入弧指向该顶点的第一条出弧第一条出弧typedef st
18、ruct VexNode /顶点的结构表示顶点的结构表示 VertexType data;ArcBox *firstin,*firstout;VexNode;3/7/202338typedef struct VexNode xlistMAX_VERTEX_NUM;/顶点结点(表头向量)int vexnum,arcnum;/有向图的当前顶点数和弧数 OLGraph;有向图的结构表示有向图的结构表示(十字链表十字链表)3/7/202339四、无向图的邻接多重表存储表示typedef struct Ebox VisitIf mark;/访问标记 int ivex,jvex;/该边依附的两个顶点的位置
19、 struct EBox *ilink,*jlink;/分别指向依附这两个顶点的下一条边 InfoType *info;/该边信息指针 EBox;边的结构表示边的结构表示3/7/202340typedef struct /邻接多重表邻接多重表 VexBox adjmulistMAX_VERTEX_NUM;int vexnum,edgenum;AMLGraph;顶点的结构表示顶点的结构表示typedef struct VexBox VertexType data;EBox *firstedge;/指向第一条依附该顶点的边 VexBox;无向图的结构表示无向图的结构表示3/7/2023417.3
20、图的遍历图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。深度优先搜索深度优先搜索广度优先搜索广度优先搜索遍历应用举例遍历应用举例3/7/202342 从图中某个顶点V0 出发,访问此顶点,然后依次从依次从V0的各个未被访问的邻接的各个未被访问的邻接点出发深度优先搜索遍历图点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。一、深度优先搜索遍历图一、深度优先搜索遍历图连通图的深度优先搜索遍历连通图的深度优先搜索遍历3/7/202343Vw1SG1SG2SG3W1、W2和W3 均为 V 的邻接点,SG1、SG2 和 SG3 分别为含
21、顶点W1、W2和W3 的子图。访问顶点 V:for(W1、W2、W3)若该邻接点W未被访问,则从它出发进行深度优先搜索遍历。w2w3w23/7/202344从上页的图解可见从上页的图解可见:1.从深度优先搜索遍历连通图的过程类似于树的先根遍历;解决的办法是:为每个顶点设立一个“访问标志 visitedw”。2.如何判别V的邻接点是否被访问?3/7/202345void DFS(Graph G,int v)/从顶点从顶点v出发,出发,深度优先搜索遍历连通图深度优先搜索遍历连通图 G visitedv=TRUE;VisitFunc(v);for(w=FirstAdjVex(G,v);w!=0;w=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 严蔚敏 课件
限制150内