第03章-非线性数据结构-图讲解课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第03章-非线性数据结构-图讲解课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 03 非线性 数据结构 讲解 课件
- 资源描述:
-
1、第第0303章章非线性数据结构非线性数据结构-图图2 图及其基本概念图及其基本概念 图的存储结构图的存储结构 图的遍历图的遍历 图的连通性及最小生成树图的连通性及最小生成树3图的基本概念图的基本概念 树与图树与图:在在树树中,每个结点只与上层的父结中,每个结点只与上层的父结点有联系,并可以与其下层的多个子结点有点有联系,并可以与其下层的多个子结点有联系。在联系。在图图中,结点之间的联系是任意的,中,结点之间的联系是任意的,每个结点都可以与其它的结点相联系。每个结点都可以与其它的结点相联系。图图:图图G G由两个集合由两个集合V(G)V(G)和和E(G)E(G)所组成,记作所组成,记作G=(V,
2、E)G=(V,E)。V(G)V(G)是图中顶点的非空有限集合;是图中顶点的非空有限集合;E(G)E(G)是图中边的有限集合。是图中边的有限集合。4图的基本概念图的基本概念 有向图有向图:如果图中每条边都是顶点的有序对,即每条边都用如果图中每条边都是顶点的有序对,即每条边都用箭头表明了方向,则此图为有向图。有向图中的边也称为箭头表明了方向,则此图为有向图。有向图中的边也称为弧弧,用用尖括号尖括号括起一对顶点表示。括起一对顶点表示。V(G1)=V1,V2,V3,V4E(G1)=,如其中弧如其中弧,称,称V1为初始点或弧之尾,为初始点或弧之尾,V2为终端点或弧之头。为终端点或弧之头。无向图无向图:如
3、果图中每条边都是顶点的无序对,则称此图为无如果图中每条边都是顶点的无序对,则称此图为无向图。无向边用向图。无向边用圆括号圆括号括起的两个相关顶点来表示。括起的两个相关顶点来表示。V(G2)=V1,V2,V3,V4 E(G2)=(V1,V2),(V1,V3),(V3,V4),(V4,V1)注注:在无向图中,在无向图中,(V1,V2)与与(V2,V1)表示同一条边表示同一条边5图的基本概念图的基本概念 子图子图:设有两个图设有两个图G GA A和和G GB B,且满足,且满足 V(GV(GB B)V(G)V(GA A),E(GE(GB B)E(G)E(GA A)则称则称G GB B是是G GA A
4、的子图。的子图。132112132132G3G3的子图6图的基本概念图的基本概念 带权图带权图:在图的边或弧上加上一个相关联在图的边或弧上加上一个相关联的数的数(权权),称为,称为带权图带权图或或网网。7图的基本概念图的基本概念 路径路径:图中一个顶点的序列称路径。如图中一个顶点的序列称路径。如v v到到vv的路径为的路径为(V=V(V=Vi0i0,V Vi1i1,V Vi2i2,V Vinin=V)=V),并且,并且V V 都属于集合都属于集合E E。路径上弧的数目称为该路径的长度。在。路径上弧的数目称为该路径的长度。在无向无向图图中,若每一对顶点之间都有路径,则称此图为中,若每一对顶点之间
5、都有路径,则称此图为连通图连通图。在。在有向图有向图中,若每一对顶点中,若每一对顶点u u和和v v之间都存在之间都存在v v到到u u及及u u到到v v的路径,的路径,则称此图为则称此图为强连通图强连通图。邻接点邻接点:在在无向图无向图中,如果边中,如果边(u,v)E(u,v)E,则,则u u和和v v互为邻结点,互为邻结点,即即u u是是v v的邻结点,的邻结点,v v也是也是u u的邻结点。在的邻结点。在有向图有向图中,如果弧中,如果弧u,vEE,则,则v v是是u u的邻结点。称的邻结点。称u u邻接到邻接到v v,或顶点,或顶点v v邻接自邻接自顶点顶点u u。顶点的度顶点的度:在
6、在无向图无向图中,顶点的度就是和该顶点相关联的边中,顶点的度就是和该顶点相关联的边的数目,记为的数目,记为TD(V)TD(V)。在。在有向图有向图中,以某顶点为弧头的弧的中,以某顶点为弧头的弧的数目,称为此顶点的数目,称为此顶点的入度入度,记作,记作ID(V)ID(V);以某顶点为弧尾的;以某顶点为弧尾的弧的数目称为此顶点的弧的数目称为此顶点的出度出度,记作,记作OD(V)OD(V)。该顶点的度则是。该顶点的度则是此顶点的入度与出度之和。此顶点的入度与出度之和。8图的存储结构图的存储结构 邻接矩阵邻接矩阵表示法和表示法和邻接表邻接表表示法表示法 邻接矩阵:邻接矩阵:用一个一维数组存放图中所有顶
7、点的信息;用一个一维数组存放图中所有顶点的信息;用一个二维数组来存放数据元素之间的关系的信息用一个二维数组来存放数据元素之间的关系的信息(即边即边或弧的集合或弧的集合E)E)。这个二维数组称之为。这个二维数组称之为邻接矩阵邻接矩阵。邻接矩阵邻接矩阵是表示顶点之间的邻接关系的矩阵。设是表示顶点之间的邻接关系的矩阵。设G=(V,E)是有是有n(n1)个顶点的图,则个顶点的图,则G的邻接矩阵的邻接矩阵A是是一个具有下列性质的一个具有下列性质的nn阶矩阵:阶矩阵:ijij1 (V,V)V,VE(G)Ai,j0 反之若或9图的存储结构图的存储结构 将顶点编号为将顶点编号为1 1VtxnumVtxnum,
8、设弧上或边上无权值,设弧上或边上无权值,则图的存储结构可以简化为用一个二维数组表示:则图的存储结构可以简化为用一个二维数组表示:int adjmatrixvtxnumvtxnumint adjmatrixvtxnumvtxnum;0111100010011010A2010100A301010 无向图无向图的邻接矩阵是对称的,而的邻接矩阵是对称的,而有向图有向图的邻接矩的邻接矩阵不一定对称。对无向图可考虑只存下三角阵不一定对称。对无向图可考虑只存下三角(或上或上三角三角)元素。元素。对于对于无向图无向图,邻接矩阵第,邻接矩阵第i i行行(或第或第i i列列)的元素之的元素之和是顶点和是顶点V V
9、i i的度。的度。对于对于有向图有向图,邻接矩阵,邻接矩阵第第i i行行元素之和为顶点元素之和为顶点V Vi i的的出度出度;第第i i列列的元素之和为顶点的元素之和为顶点V Vi i的的入度入度。图的存储结构图的存储结构0111100010011010A2010100A301011图的存储结构图的存储结构 网的邻接矩阵可定义为网的邻接矩阵可定义为:ijijijW (V,V)V,VE(G)Ai,j 反之其中其中W Wijij是边是边(V(Vi i,V,Vj j)或弧或弧 V 上的权值。上的权值。若或12图的存储结构图的存储结构 邻接表邻接表:邻接表是一种顺序分配和链式分配相结合的存储结邻接表是
10、一种顺序分配和链式分配相结合的存储结构。它包括两个部分:一部分是构。它包括两个部分:一部分是链表链表;另一部分是;另一部分是向量向量。在邻接表中,对图中在邻接表中,对图中每个顶点建立一个单链表每个顶点建立一个单链表,第,第i i个单链个单链表中的结点包含了顶点表中的结点包含了顶点V Vi i的所有邻接顶点。每个结点由三的所有邻接顶点。每个结点由三个域组成:个域组成:adjvexadjvex、datadata和和nextarcnextarc,adjvexdatanextarc指向顶点Vi的下一邻接点的指针权值顶点Vi的邻接点在图中的位置13 为便于邻接表操作,在每个单链表上附设一个为便于邻接表操
11、作,在每个单链表上附设一个头结点,在头结点中有两个域:头结点,在头结点中有两个域:vexdatavexdata和和firstarcfirstarc。vexdata firstarc指向Vi的第一个邻接点的指针存储Vi的名字或有关信息图的存储结构图的存储结构 邻接表中将邻接表中将每个单链表的头结点以顺序结构的形每个单链表的头结点以顺序结构的形式存储式存储,以便能随机访问任一顶点的单链表。,以便能随机访问任一顶点的单链表。14 邻接表的存储结构可以用邻接表的存储结构可以用C C语言描述如下:语言描述如下:#define VTXNUM n#define VTXNUM n/*n n为图中顶点个数的最大
12、可能值为图中顶点个数的最大可能值*/struct arcnodestruct arcnode int adjvexint adjvex;float data;float data;struct arcnode struct arcnode*nextarcnextarc;typedef struct arcnode ARCNODEtypedef struct arcnode ARCNODE;struct headnodestruct headnode int vexdataint vexdata;ARCNODE ARCNODE*firstarcfirstarc;adjlistVTXNUMadjl
13、istVTXNUM;n邻接表特别适合与表示结点数多但边数较少的图邻接表特别适合与表示结点数多但边数较少的图图的存储结构图的存储结构15231231437ABCABC734(a)(b)有向带权图及其邻接表有向带权图及其邻接表图的存储结构图的存储结构231231437ABCABC734(a)(b)1642123123124(a)(b)3413412412343无向图及其邻接表无向图及其邻接表 图的存储结构图的存储结构42123123124(a)(b)341341241234317 在邻接表上容易找到任一顶点的第一个邻接点和下在邻接表上容易找到任一顶点的第一个邻接点和下一个邻接点,但要判定任意两个顶
14、点一个邻接点,但要判定任意两个顶点(V(Vi i和和V Vj j)之间之间是否有边或弧相连,则需搜索第是否有边或弧相连,则需搜索第i i个或第个或第j j个链表,个链表,因此不及邻接矩阵方便。因此不及邻接矩阵方便。对一个图来说,邻接表不是唯一的,它取决于建立对一个图来说,邻接表不是唯一的,它取决于建立邻接表时,结点在每个单链表中的插入策略。邻接表时,结点在每个单链表中的插入策略。对于有向图,其邻接表中第对于有向图,其邻接表中第i i个单链表的结点个数个单链表的结点个数就是此结点的就是此结点的出度出度;对于无向图,其邻接表中第;对于无向图,其邻接表中第i i个单链表的结点个数就是此结点的个单链表
15、的结点个数就是此结点的度度。图的存储结构图的存储结构18图的遍历图的遍历 从图中某一顶点出发访问图中其余的顶点,使每从图中某一顶点出发访问图中其余的顶点,使每个顶点都被访问且仅被访问一次,这个过程就叫个顶点都被访问且仅被访问一次,这个过程就叫做图的遍历做图的遍历(traversing graph)(traversing graph)。为避免同一顶点被访问多次,在遍历图的过程中,为避免同一顶点被访问多次,在遍历图的过程中,必须记下每个已访问过的顶点。为此,设一个辅必须记下每个已访问过的顶点。为此,设一个辅助数组助数组visitednvisitedn,它的初值为,它的初值为“假假”或者零,或者零,
16、一旦访问了顶点一旦访问了顶点V Vi i,便置,便置visitedivisitedi为为“真真”或或者为被访问时的次序号。者为被访问时的次序号。通常有两种遍历图的方法,通常有两种遍历图的方法,深度优先搜索深度优先搜索和和广度广度优先搜索优先搜索。19 深度优先搜索深度优先搜索图的深度优先搜索遍历图的深度优先搜索遍历(depth-first(depth-first search)search)类似于树的先序遍历,是树的类似于树的先序遍历,是树的先序遍历先序遍历的推广。的推广。深度优先搜索深度优先搜索的基本思想是:的基本思想是:首先访问图首先访问图G G的指定起始点的指定起始点V V0 0;从从V
展开阅读全文