数据结构课件第七章.pptx
《数据结构课件第七章.pptx》由会员分享,可在线阅读,更多相关《数据结构课件第七章.pptx(98页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 第第7 7章章 图图本章主题:本章主题:图图教学目的:教学目的:教学重点:教学重点:图的各种存储方式及其运算 教学难点:教学难点:图结构存储方式的选择,几种经典图算法的实现本章内容:本章内容:图的基本概念 图的存储结构 图的遍历 最小生成树 最短路径 拓扑排序 关键路径第1页/共98页2基本内容:7.1 基本术语7.2 存储结构7.3 图的遍历7.4 图的连通性问题7.5 有向无环图及其应用7.6 最短路径第2页/共98页3图(Graph)是一种较线性表和树更为复杂的非线性结构。是对结点的前趋和后继个数不加限制的数据结构,用来描述元素之间“多对多”的关系。在线性结构中,结点之间的关系是线性
2、关系,除开始结点和 终端结点外,每个结点只有一个直接前趋和直接后继。在树形结构中,结点之间的关系实质上是层次关系,同层上的每个结点可以和下一层的零个或多个结点(即孩子)相关,但只能和上一层的一个结点(即双亲)相关(根结点除外)。在图结构中,对结点(图中常称为顶点)的前趋和后继个数不加限制的,即结点之间的关系是任意的。第3页/共98页4ADTGraph数据对象V:v是具有相同特性的数据元素的集合,称为顶点集。数据关系R:R=VR;VR=|v,wV 且 P(v,w),表示从v到w的弧,谓词P(v,w)定义了弧的意义或信息.7.1图及其基本运算7.1.1图的抽象数据类型定义第4页/共98页57.1.
3、2 图的基本术语1.弧、弧头、弧尾、有向图若 VR,则表示从顶点v到顶点w的一条弧。称顶点w为弧头,称顶点v为弧尾。弧头:弧的终点弧尾:弧的起点弧 弧尾V 弧头w由顶点集和弧集构成的图称为有向图。ABCDE第5页/共98页62.边、无向图若 VR 必有 VR,则称(v,w)为顶点v和顶点w之间存在一条边。由顶点集和边集构成的图称为无向图。ABCDEF双向的两条弧构成一条边第6页/共98页7权权 某某些些图图的的边边或弧具具有有与与它它相相关关的的数数,称称之之为为权权。权可以代表一个顶点到另一个顶点的距离,耗费等。3.网弧或边带权的图分别称为有向网或无向网。第7页/共98页84.子图设有两个图
4、G(V,E)和G(V,E)。若V V 且E E,则称图G是图G的子图。子图:第8页/共98页95.完全图、稀疏图、稠密图假设图中有n个顶点,e条边,则 含有e=n(n-1)/2条边的无向图称作 完全图;含有e=n(n-1)条弧的有向图称作 有向完全图;除此之外:若边或弧的个数enlogn,则称作 稀疏图,否则称作 稠密图。第9页/共98页10例:判断下列4种图形各属什么类型?无向无向图(树)有向图有向n n(n n-1)/2-1)/2条边条边n n(n n-1)-1)条边条边G1的顶点集合为V(G1)=0,1,2,3边集合为E(G1)=(0,1),(0,2),(0,3),(1,2),(1,3)
5、,(2,3)完全图完全图第10页/共98页116.邻接点、度、入度、出度u 对于无向图来说,假若顶点v和顶点w之间存在一条边,则称顶点v和w互为邻接点,边 (v,w)和顶点v,w相关联。与顶点v相关的边或弧的数目称作顶点v的度。u 对有向图来说,从从x x到到y y有一条弧,则有一条弧,则y y邻接自邻接自x x,但但x x邻接到邻接到y y。x y x y 以顶点v为弧尾的弧的数目定义为顶点的出度;以顶点v为弧头的弧的数目定义为顶点的入度。度(TD)=出度(OD)+入度(ID)第11页/共98页127.路径、路径长度、简单路径、简单回路在图G=(V,VR)中若存在一个顶点序列Vp,Vi1,V
6、i2,Vin,Vq,,使得每相邻两个顶点一定有一条边(Vp,Vi1),(Vi1,Vi2),.,(Vin,Vq)(或弧)均属于VR,则称从顶点Vp到顶点Vq之间存在一条路径,路径上边(或弧)的数目称作路径长度。若序列中的顶点不重复出现,则称作简单路径;若Vp=Vq,则称这条路径为回路。除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路,称为简单回路。第12页/共98页13第13页/共98页148 8连通图与连通分量连通图与连通分量在无向图中在无向图中,若从顶点若从顶点v v1 1到顶点到顶点v v2 2有路径有路径,则称顶点则称顶点v v1 1与与v v2 2是连通的。如果图中任意是连通的
7、。如果图中任意一对顶点一对顶点vi和vj(vi,vjV)都是连通的都是连通的,则称此图是则称此图是连通图连通图。若图为。若图为非连通图,非连通图,则图则图中各个中各个极大连通子图极大连通子图叫叫做连通分量做连通分量。在非连通图中一定存在若干个极大连通子图(连通分量),每个子图一定是一个连通图。这几个连通分量之间是互相独立,互不相关的。DEGHIKABLMCFJABLMCFDEGHKJIV1V2V3V4V5第14页/共98页159 9强连通图与强连通分量强连通图与强连通分量 在有向图中在有向图中,若对于每一对顶点若对于每一对顶点v vi i和和v vj j,都存在一条从都存在一条从v vi i到
8、到v vj j和从和从v vj j到到v vi i的路径的路径,则称则称此图是此图是强连通图强连通图。非强连通图的。非强连通图的极大强连通子图极大强连通子图叫做叫做强连通分量强连通分量。v1vV3V4vv1V3V4第15页/共98页1610.生成树、生成森林 假设一个连通图有n个顶点和e条边,其中n个顶点和n-1条边构成一个极小连通子图,称该极小连通子图为此连通图的生成树。极小连通子图的特点:在n-1条边中,去掉一条边,图就不是连通图;增加一条边,必然存在回路。第16页/共98页17ABLMCFDEGHKJIABLMCFJABLMCFJ 一个连通图,可以存在若干极小连通子图或生成树。一个非连通
9、图,存在若干个连通分量,每个连通分量的生成树的集合为此非连通图的生成森林。ABLMCFJDEGHIK第17页/共98页187.1.3 7.1.3 图的基本运算图的基本运算 图的基本运算也包括查找、插入和删除。(1)顶点定位运算 确定顶点v在图中的位置;(2)取顶点运算 求取图中第i个顶点;(3)求第一个邻接点运算 求图中顶点v的第一个邻接点;(4)求下一个邻接点运算 已知w为图中顶点v的某个邻接点,求顶点w的下一个邻接点;(5)插入顶点运算 在图中增添一个顶点v作为图的第n+1个顶点,其中n为插入该顶点前图的顶点个数;(6)插入弧运算 在图中增添一条从顶点v到顶点w的弧。(7)删除顶点运算 从
10、图中删除顶点v以及所有与顶点v相关联的弧。(8)删除弧运算 从图中删除一条从顶点v到顶点w的弧。第18页/共98页197.2 7.2 图的存储结构图的特点:非线性结构(图的特点:非线性结构(m:n m:n)邻接表邻接多重表十字链表设计为邻接矩阵链式存储结构:顺序存储结构:无!(多个顶点,无序可言)但可用数组描述元素间关系。可用多重链表重点介绍:邻接矩阵(数组)表示法邻接表(链式)表示法V1V2V3V4V5V6第19页/共98页20一、邻接矩阵(数组)表示法一、邻接矩阵(数组)表示法用两个数组分别表示数据元素的(顶点)的信息和(弧)的信息。设图设图 A=(A=(V V,E E)有有 n n 个顶
11、点,个顶点,则图的用于表示数据元素之间关系的邻接矩阵是一个则图的用于表示数据元素之间关系的邻接矩阵是一个二维数组二维数组 A.EdgennA.Edgenn,定义为:,定义为:例例1 1(无向图邻接矩阵):(无向图邻接矩阵):v1v2v3v5v4v4AA.Edge=(v1v2v3v4v5)v1v2v3v4v5000000000000000000000000001010101010101110101011100101010101010111010101110顶点表:顶点表:无权图第20页/共98页21分析分析1 1:无向图的邻接矩阵是无向图的邻接矩阵是对称对称的;的;分析分析2 2:对于无向图来说
12、,:对于无向图来说,顶点顶点i i 的的度度第第 i i 行行(列列)中中11的个数的个数;特别:完全图的邻接矩阵中,对角元素为特别:完全图的邻接矩阵中,对角元素为0 0,其余全,其余全1 1。例例1 1:v1v2v3v5v4v4AA.Edge=(v1v2v3v4v5)v1v2v3v4v5000000000000000000000000001010101010101110101011100101010101010111010101110顶点表:顶点表:第21页/共98页22例2:有向图的邻接矩阵分析分析1 1:有向图的邻接矩阵可能是不对称的。分析分析2 2:顶点的出度=第i行元素之和,OD(V
13、i)=A.Edge i j 顶点的入度=第i列元素之和。ID(Vi)=A.Edge j i 顶点的度=第i行元素之和+第i列元素之和,即:TD(Vi)=OD(Vi)+ID(Vi)v1v2v3v4A A邻接矩阵:A.Edge=(v1v2v3v4)v1v2v3v40000000000000000注:在有向图的邻接矩阵中,第i行含义:以结点vi为尾的弧(即出度边);第i列含义:以结点vi为头的弧(即入度边)。顶点表:01100000000110000110000000011000第22页/共98页23邻接矩阵:A.Edge=顶点表:V0 v1 v2 v3 v4 v50 0 0 0 0 0 v0 1
14、0 0 1 0 0 v10 1 0 0 0 1 v20 0 1 0 1 1 v31 0 0 0 0 0 v41 1 0 0 1 0 v5第23页/共98页24 容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。n个顶点需要n*n个单元存储边(弧);空间效率为O(n2)。对稀疏图而言尤其浪费空间。特别讨论:网(即有权图)的邻接矩阵定义为:A.Edgeij=Wij或(vi,vj)VR无边(弧)v1v2v3v4Nv5v65489755613以有向网为例:邻接矩阵:N.Edge=(v1v2v3v4v5v6)邻接矩阵法优点:邻接矩阵法缺点:顶点表:57489565315
15、748956531第24页/共98页25二、邻接表(链式)表示法二、邻接表(链式)表示法 邻接表是图的一种链式存储结构,它对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧),每个结点由三个域组成:邻接点域(adjvex)指示与顶点vi邻接的点在图中的位置,链域(nextarc)指示下一条边或弧的结点,数据域(info)存储和边或弧相关的信息(如权值)。第25页/共98页26例例例例1 1:已知某网的邻接(出边)表,请画出该网络。已知某网的邻接(出边)表,请画出该网络。已知某网的邻接(出边)表,请画出该网络。已知某网的邻接(出边)表,请画出该
16、网络。8064125当邻接表的存储结构形成后,图便唯一确定!第26页/共98页27例例例例1 1:无向图的邻接表无向图的邻接表无向图的邻接表无向图的邻接表v1v2v3v5v4v4邻接表0123413341420例例2 2:有向图的邻接表有向图的邻接表邻接表(出边)V4V3V2V10230逆邻接表(入边)注:邻接表不唯一,因各个边结点的链入顺序是任意的。邻接表不唯一,因各个边结点的链入顺序是任意的。v1v2v3v4v5231420v1v2v3v42301V4V3V2V13 第27页/共98页28分析1:对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,空间效率为O(n+2e
17、)。若是稀疏图(en2),则比邻接矩阵表示法O(n2)省空间。邻接表存储法的特点:分析2:在有向图中,邻接表中除了n个头结点外,只有e个表结点,空间效率为O(n+e)。若是稀疏图,则比邻接矩阵表示法合适。它其实是对邻接矩阵法的一种改进怎样计算无向图顶点的度?邻接表的缺点:怎样计算有向图顶点的出度?怎样计算有向图顶点的入度?怎样计算有向图顶点Vi的度:需遍历全表邻接表的优点:TD(Vi)=单链表中链接的结点个数OD(Vi)单链出边表中链接的结点数ID(Vi)邻接点为Vi的弧个数TD(Vi)=OD(Vi)+I D(Vi)空间效率高;容易寻找顶点的邻接点;判断两顶点间是否有边或弧,需搜索两结点对应的
18、单链表,没有邻接矩阵方便。第28页/共98页29讨论:邻接表与邻接矩阵有什么异同之处?1.联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。2.区别:对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。邻接矩阵的空间复杂度为O(n2),而邻接表的空间复杂度为O(n+e)。3.用途:邻接矩阵多用于稠密图的存储(e接近n(n-1)/2);而邻接表多用于稀疏图的存储(en2)第29页/共98页30三、三、十字链表十字链表(适用于有向图)适用于有向图)第30页/共98页31它是有向图的另一种链式结构。思路:将邻接
19、矩阵用链表存储,是邻接表、逆邻接表的结合。1、每条弧对应一个结点(称为弧结点,设5个域)2、每个顶点也对应一个结点(称为顶点结点,设3个域)tailvexheadvexHlinktlinkinfo顶点结点弧结点三、十字链表三、十字链表tailvex:弧尾顶点位置 headvex:弧头顶点位置hlink:弧头相同的下一弧位置tlink:弧尾相同的下一弧位置info:弧信息n个顶点用顺序存储结构data:存储顶点信息。Firstin:以顶点为弧头的第一条弧结点。Firstout:以顶点为弧尾的第一条弧结点。dataFirstinFirstout适用于有向图第31页/共98页320v11v22v33
20、v4v1v2v3v40 1022 023例:画出有向图的十字链表。例:画出有向图的十字链表。十字链表优点:容易操作,如求顶点的入度、出度等。空间复杂度与邻接表相同;建立的时间复杂度与邻接表相同。303132数组下标不属结点分量第32页/共98页33v1v2v3v5v4v4邻接表0123413341420v1v2v3v4v5231420邻接表(出边)V4V3V2V10230逆邻接表(入边)v1v2v3v42301V4V3V2V13 第33页/共98页340v11v22v33v4v1v2v3v40 1022 023303132数组下标不属结点分量第34页/共98页35一、深度优先搜索二、广度优先搜
21、索 7.3 图的遍历图的遍历遍历定义:从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历图的遍历,它是,它是图的基本运算。遍历实质:找每个顶点的邻接点的过程。图的特点:图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。解决思路:可设置一个辅助数组 visitedn,用来标记每个被访问过的顶点。它的初始状态为0,在图的遍历过程中,一旦某一个顶点i 被访问,就立即改 visitedi为1,防止它被多次访问。图常用的遍历:怎样避免重复访问?第35页/共98页36一、深度优先搜索一、深度
22、优先搜索一、深度优先搜索一、深度优先搜索(DFSDFSDFSDFS)基本思想:仿树的先序遍历过程。Depth_FirstSearchv1v1v2v3v8v7v6v4v5DFSDFS结果结果例例1 1:v2v4v8v5v3v6v7例例2 2:v2v1v3v5v2v1v3v5DFSDFS结果结果v4v4v6v6起点起点遍历步骤第36页/共98页37深度优先搜索(遍历)步骤:简单归纳:访问起始点v;若v的第1个邻接点没访问过,深度遍历此邻接点;若当前邻接点已访问过,再找v的第2个邻接点重新遍历。第37页/共98页38讨论讨论1 1:计算机如何实现计算机如何实现DFSDFS?1 2345610 000
23、002 20 0000030 0000040 0000050 0000060 0000000000012345601000011 100001 11 110001 11 11 10101 11 11 111 101 11 11 11 11 11DFSDFS结果结果邻接矩阵A辅助数组 visitedn起点v2v1v3v5v2v1v3v5v4v4v6v6开辅助数组 visitedn!例:1 23 456101 11 11 1002 21 1 00 01 1031 1 00 01 1041 1 00 001 1501 11 1 00060 001 100第38页/共98页39讨论讨论2 2:DFSD
24、FS算法如何编程?算法如何编程?可以用递归算法!void DFSTraverse(Graph G,Status(*Visit)(int v)/算法7.4/对图G作深度优先遍历。VisitFunc=Visit;/使用全局变量VisitFunc,使DFS不必设函数指针参数 for(v=0;vG.vexnum;+v)visitedv=false;/访问标志数组初始化 for(v=0;v=0;w=NextAdjVex(G,v,w)if(!visitedw)/对v的尚未访问的邻接顶点w递归调用DFS DFS(G,w);123456780 00 00 00 00 00 00 00 01 10 00 00
25、00 00 00 00 01 11 10 00 00 00 00 00 01 11 10 01 10 00 00 00 01 11 10 01 10 00 00 01 11 11 10 01 11 10 00 01 11 11 11 11 11 10 01 11 11 11 11 11 11 11 11 11 11 11 11 11 11 10 01 1第40页/共98页41讨论讨论3 3:在图的邻接表中如何进行在图的邻接表中如何进行DFSDFS?v0v1v2v3v0v1v2v3DFSDFS结果结果00000123辅助数组 visitedn1000110011101111例:照样借用visit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 第七
限制150内