本章主要介绍图的基本概念、图的存储结构和有关图的一些常课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《本章主要介绍图的基本概念、图的存储结构和有关图的一些常课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 本章 主要 介绍 基本概念 存储 结构 有关 一些 课件
- 资源描述:
-
1、本章主要介绍图的基本概念、图的存储结构和有关图本章主要介绍图的基本概念、图的存储结构和有关图的一些常用算法。通过本章学习:的一些常用算法。通过本章学习:1)了解图的定义和术语了解图的定义和术语 2)掌握图的各种存储结构掌握图的各种存储结构 3)掌握图的深度优先搜索和广度优先搜索遍历算法掌握图的深度优先搜索和广度优先搜索遍历算法 4)理解最小生成树、最短路径、拓扑排序、关键路径理解最小生成树、最短路径、拓扑排序、关键路径等图的常用算法等图的常用算法 图图(Graph)是一种较线性表和树更为复杂的非线性结构:对结点的前趋和是一种较线性表和树更为复杂的非线性结构:对结点的前趋和后继个数不加限制的数据
2、结构,描述元素之间后继个数不加限制的数据结构,描述元素之间”多对多多对多”关系。图的应用极广,关系。图的应用极广,已渗透到诸如语言学、逻辑学、物理、化学、电讯工程、计算机科学以及数学已渗透到诸如语言学、逻辑学、物理、化学、电讯工程、计算机科学以及数学的其它分支中。的其它分支中。在线性结构中,结点之间是在线性结构中,结点之间是线性关系线性关系,除开始结点和终端结点外,每个结,除开始结点和终端结点外,每个结点只有一个直接前趋和直接后继。点只有一个直接前趋和直接后继。在树形结构中,结点之间实质上是在树形结构中,结点之间实质上是层次关系层次关系,同层上的每个结点可以和下,同层上的每个结点可以和下一层的
3、零个或多个结点(即孩子)相关,但只和上一层的一个结点(即双亲)一层的零个或多个结点(即孩子)相关,但只和上一层的一个结点(即双亲)相关(根结点除外),树是图的特例!相关(根结点除外),树是图的特例!图的引入:哥尼斯堡桥问题图的引入:哥尼斯堡桥问题 6.1.2 图的基本术语图的基本术语R RZ ZY YX XX XS SR RZ ZY Y(a)G1(b)G2(c)G3(d)G452341123467522223645211.无向图无向图G1中顶点中顶点3的度为的度为 4,顶点,顶点5的度为的度为3。2.有向图有向图G3中顶点中顶点1的出度的出度OD(1)=3,入度入度ID(1)=1,其其度度TD
4、(1)=4。在图在图6-16-1中,图中,图(a)a)为无向图,其中为无向图,其中G1G1的顶点集合和边集合分别为:的顶点集合和边集合分别为:V(G1)=1V(G1)=1,2 2,3 3,4 4,5 5,6 6,77,E(G1)=(1E(G1)=(1,2)2),(l(l,3)3),(2(2,3)3),(3(3,4)4),(3(3,5)5),(5(5,6)6),(5(5,7)7)。图图(c)c)为有向图,其中为有向图,其中G3G3的顶点集合和弧集合分别为的顶点集合和弧集合分别为V(G3)=1V(G3)=1,2 2,3 3,4 4,5 5,66,E(G3)=,在无向图在无向图G中,若存在一个顶点序
5、列中,若存在一个顶点序列Vp,Vi1,Vi2,Vin,Vq,使得(使得(Vp,Vi1),(Vi1,Vi2),.,(Vin,Vq)均属于均属于E(G),),则称顶则称顶点点Vp到到Vq存在一条路径。存在一条路径。若一条路径上除起点和终点可以相同外,其余顶点均不相同,若一条路径上除起点和终点可以相同外,其余顶点均不相同,则称此路径为则称此路径为简单路径简单路径。起点和终点相同的路径称为起点和终点相同的路径称为回路回路;简单路径组成的回路称为简单回路。简单路径组成的回路称为简单回路。路径上经过的路径上经过的边的数目边的数目称为该路径的称为该路径的路径长度路径长度。边边:无向图中无向图中顶点的偶对,写
6、成(顶点的偶对,写成(VxVx,VyVy)或(或(VyVy,VxVx)。)。弧弧:有向图中顶点的偶对有向图中顶点的偶对,Vx,VyVx,Vy表示从表示从VxVx到到VyVy。弧头弧头:弧的终点弧的终点弧尾弧尾:弧的起点弧的起点弧弧 VxVx,VyVy 弧尾弧尾Vx 弧头弧头Vy 设有两个图设有两个图 G(V,E)和和 G(V,E)。若若 V V 且且 E E,则称则称 图图G 是是 图图G 的子图。的子图。(a)(b)52341364521图图6-3 6-3 连通分量和强连通分量连通分量和强连通分量 v vi i和和v vj j(v vi i,v vj jVV)图图6-16-1中中G1G1是连
7、通图,是连通图,G2G2是非连通图。是非连通图。G2 G2中有中有3 3个连通分量,如图个连通分量,如图6-36-3(a a)所示。所示。邻接点邻接点顶点顶点:图中的结点图中的结点 邻接点邻接点:无向图中,若边无向图中,若边(x,x,y)y)E E,有向图中,若弧有向图中,若弧(x,x,y)y)E E,VxVyx、y互为邻接点互为邻接点VxVyy是是x的邻接点的邻接点2022-12-2811 邻接矩阵邻接矩阵(Adjacency Matrix)是表示顶点之间相邻关系的矩阵。设是表示顶点之间相邻关系的矩阵。设G(V,E)是具有是具有n个顶点的图,则个顶点的图,则G的邻接矩阵是具有如下性质的的邻接
8、矩阵是具有如下性质的n阶方阶方阵。阵。Aij=1 对无向图若存在边(vi,vj),对有向图若存在弧0 反之无向图的邻接矩阵是以主对角线对称的,有向图的邻接矩阵可能是不无向图的邻接矩阵是以主对角线对称的,有向图的邻接矩阵可能是不对称的。对称的。在有向图中:在有向图中:第第 i 行行 1 的个数就是顶点的个数就是顶点 i 的出度,的出度,第第 j 列列 1 的个数就是顶点的个数就是顶点 j 的入度。的入度。在无向图中在无向图中,第第 i 行行(列列)1 的个数就是顶点的个数就是顶点i 的度。的度。2022-12-281214320011000010100101(a)(b)图图6-6 有向图及其邻接
9、矩阵有向图及其邻接矩阵 154320010101011001001110010011(a)(b)图图6-5 无向图及其邻接矩阵无向图及其邻接矩阵2022-12-2813 无向图,(无向图,(vi,vj)和(和(vj,vi)表示同一条边,因此,在邻接矩阵中表示同一条边,因此,在邻接矩阵中Aij=Aji。无向图的邻接矩阵是(关于主对角线)对称矩阵,可用主对角线以上(或以无向图的邻接矩阵是(关于主对角线)对称矩阵,可用主对角线以上(或以下)的部分表示。下)的部分表示。对有向图,弧对有向图,弧和和表示方向不同的两条弧,表示方向不同的两条弧,Aij和和Aji表示不同表示不同的弧,所以有向图的邻接矩阵一般
10、不具有对称性。的弧,所以有向图的邻接矩阵一般不具有对称性。邻接矩阵表示法适合于以顶点为主的运算。邻接矩阵表示法适合于以顶点为主的运算。对于有向图,顶点对于有向图,顶点vi的出度的出度OD(vi)等于邻接矩阵第等于邻接矩阵第i行元素之和;顶点行元素之和;顶点vi的入度的入度ID(vi)等于邻接矩阵第等于邻接矩阵第i列元素之和,即列元素之和,即:对于无向图,顶点对于无向图,顶点v vi i的度等于邻接矩阵第的度等于邻接矩阵第i i行的元素之和,即:行的元素之和,即:njjiA1,njijA1,njjiA1,TDTD(v vi i)=2022-12-2814 使用邻接矩阵存储结构,可用一维数组表示图
11、的顶点集合,使用邻接矩阵存储结构,可用一维数组表示图的顶点集合,用二维数组表示图的顶点之间关系(边或弧)的集合,数据类型用二维数组表示图的顶点之间关系(边或弧)的集合,数据类型定义如下:定义如下:#define MAX_VERTICES 50 /最大顶点数最大顶点数typedef int AdjMatrixMAX_VERTICESMAX_VERTICES;/邻接矩阵类型邻接矩阵类型typedef struct VertexType vexsMAX_VERTICES;/顶点表顶点表AdjMatrix arcs;/邻接矩阵邻接矩阵int vexnum,arcnum;/图的顶点数和弧数图的顶点数和弧
12、数 MGraph;由于一般图的边或弧较少,其邻接矩阵的非零元素较少,属稀由于一般图的边或弧较少,其邻接矩阵的非零元素较少,属稀疏矩阵,因此会造成一定存储空间的浪费。疏矩阵,因此会造成一定存储空间的浪费。2022-12-2815建立邻接矩阵算法建立邻接矩阵算法:void CreateMGraph(MGraph&G)int i,j,k,w;char v1,v2;printf(Input vexnum&arcnum:);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(Input Vertices:);scanf(%s,G.vexs);for(i=0;iG.vexnum
13、;i+)scanf(%c,&G.vexsi);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=0;for(k=0;kG.arcnum;k+)printf(Input Arcs(v1,v2&w):n);scanf(%c%c,%d,&v1,&v2,&w);i=LocateVex(G,v1);j=LocateVex(G,v2);j=LocateVex(G,v2);void PrintMGraph(MGraph G)/输出输出 int i,j;printf(Output Vertices:);printf(%s,G.vexs);printf(n);
14、printf(Output AdjMatrix:n);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)printf(%4d,G.arcsij);printf(n);return;G.arcsij=w;G.arcsji=w;return;2022-12-2816 图的链式存储结构图的链式存储结构 1)1)为每个顶点建立一个单链表,为每个顶点建立一个单链表,2)2)第第i i个单链表中包含顶点个单链表中包含顶点ViVi的所有邻接顶点。的所有邻接顶点。邻接表是图的一种链式存储结构。在邻接表中为图中每个顶点建立邻接表是图的一种链式存储结构。在邻接表中为图中每个顶点建
15、立一个单链表,用单链表中的一个结点表示依附于该顶点的一条边(或一个单链表,用单链表中的一个结点表示依附于该顶点的一条边(或表示以该顶点为弧尾的一条弧),称为边(或弧)结点。表示以该顶点为弧尾的一条弧),称为边(或弧)结点。表结点表结点头结点头结点vertexlinkinfodatafirstarc2022-12-28172022-12-28182022-12-2819(a)1304421302143231501234(b)41320212310123(c)143213003201232022-12-28202022-12-2821hlinkhlink指向弧头相同的下一条弧,指向弧头相同的下一条
16、弧,tlinktlink指向弧尾相同的指向弧尾相同的下一条弧;下一条弧;datadata顶点信息,顶点信息,firstinfirstin以该顶点为头的第一个弧结点,以该顶点为头的第一个弧结点,firstoutfirstout以该结点为尾的第一个弧结点以该结点为尾的第一个弧结点headvextailvexhlinktlinkinfofirstindatafirstout顶点结点顶点结点弧结点弧结点2022-12-28224 43 32 21 132312012030103212022-12-28232022-12-2824(a)无向网 (b)有向网 图 6-4 无向带权图和有向带权图 5 3 1
17、 2 4 4 1 6 7 2 3 5 8 A B C 2 1 5 3 4 或弧或弧权权可以代表一个顶点到另一个顶点的距离,耗费等。可以代表一个顶点到另一个顶点的距离,耗费等。一般称为一般称为如图如图6-46-4所示所示 图的基本运算也包括查找、插入和删除。图的基本运算也包括查找、插入和删除。(1 1)顶点定位运算)顶点定位运算 确定顶点确定顶点v v在图中的位置;在图中的位置;(2 2)取顶点运算)取顶点运算 求取图中第求取图中第i i个顶点;个顶点;(3 3)求第一个邻接点运算)求第一个邻接点运算 求图中顶点求图中顶点v v的第一个邻接点;的第一个邻接点;(4 4)求下一个邻接点运算)求下一
18、个邻接点运算 已知已知w w为图中顶点为图中顶点v v的某个邻接点,求顶点的某个邻接点,求顶点w w的下一个邻接点;的下一个邻接点;(5 5)插入顶点运算)插入顶点运算 在图中增添一个顶点在图中增添一个顶点v v作为图的第作为图的第n+1n+1个顶点,其中个顶点,其中n n为插入该顶点前图的顶点个数;为插入该顶点前图的顶点个数;(6 6)插入弧运算)插入弧运算 在图中增添一条从顶点在图中增添一条从顶点v v到顶点到顶点w w的弧。的弧。(7 7)删除顶点运算)删除顶点运算 从图中删除顶点从图中删除顶点v v以及所有与顶点以及所有与顶点v v相关联的弧。相关联的弧。(8 8)删除弧运算)删除弧运
19、算 从图中删除一条从顶点从图中删除一条从顶点v v到顶点到顶点w w的弧。的弧。2022-12-28262022-12-2827int LocateVex(ALGraph G,char u)int i;for(i=0;iG.vexnum;i+)if(u=G.verticesi.data)return i;if(i=G.vexnum)printf(Error u!n);exit(1);return 0;void CreateALGraph_adjlist(ALGraph&G)int i,j,k,w;char v1,v2;ArcNode*p;printf(Input vexnum&arcnum:)
20、;scanf(%d,%d,&G.vexnum,&G.arcnum);printf(Input Vertices:);for(i=0;iG.vexnum;i+)scanf(%c,&G.verticesi.data);G.verticesi.firstarc=NULL;2022-12-2828 printf(Input Arcs(v1,v2&w):n);for(k=0;kadjvex=j;p-info=w;p-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p;return;图的遍历顺序有两种:图的遍历顺序有两种:但是,在图中有回路,从图中某一顶
21、点出发访问图中其它但是,在图中有回路,从图中某一顶点出发访问图中其它顶点时,可能又会回到出发点,而图中或许还有顶点没有访问顶点时,可能又会回到出发点,而图中或许还有顶点没有访问到,因此,图的遍历较树的遍历更复杂。到,因此,图的遍历较树的遍历更复杂。图的遍历算法是求解图的连通性问题、拓扑排序和求关键路图的遍历算法是求解图的连通性问题、拓扑排序和求关键路径等算法的基础。径等算法的基础。1 深度优先搜索思想深度优先搜索思想 深度优先搜索遍历类似于树的先序遍历。假定给定图深度优先搜索遍历类似于树的先序遍历。假定给定图G的初态是的初态是所有顶点均未被访问过,在所有顶点均未被访问过,在G中任选一个顶点中任
22、选一个顶点i作为遍历的初始点,作为遍历的初始点,则深度优先搜索则深度优先搜索递归调用包含以下操作:递归调用包含以下操作:(1 1)访问搜索到的未被访问的邻接点;)访问搜索到的未被访问的邻接点;(2 2)将此顶点的)将此顶点的visitedvisited数组元素值置数组元素值置1 1;(3 3)搜索该顶点的未被访问的邻接点,若该邻接点存在,则从)搜索该顶点的未被访问的邻接点,若该邻接点存在,则从此邻接点开始进行同样的访问和搜索。此邻接点开始进行同样的访问和搜索。深度优先搜索深度优先搜索DFSDFS可描述为:可描述为:(1 1)访问)访问v v0 0顶点;顶点;(2 2)置)置 visitedvv
23、isitedv0 0=1=1;(3)搜索搜索v0未被访问的邻接点未被访问的邻接点w,若存在邻接点若存在邻接点w,则则DFS(w)。17823456(a)int visitedMAX_VERTEX_NUM;void DFS(ALGraph G,int v)ArcNode*p;printf(%c,G.verticesv.data);visitedv=1;p=G.verticesv.firstarc;while(p)if(!visitedp-adjvex)DFS(G,p-adjvex);p=p-nextarc;/从第从第v个顶点出发个顶点出发DFS整个图的整个图的DFS遍历遍历void DFSTra
24、verse(ALGraph G)for(int v=0;vG.vexnum;+v)visitedv=0;for(v=0;vG.vexnum;+v)if(!visitedv)DFS(G,v);对于连通图,从一个顶点出发,调用对于连通图,从一个顶点出发,调用DFS函数即可将所有顶点函数即可将所有顶点都遍历到。都遍历到。1 广度优先搜索思想广度优先搜索思想 广度优先搜索遍历类似于树的按层次遍历。广度优先搜索遍历类似于树的按层次遍历。对于无向连通图,广度优先搜索是从图的某个顶点对于无向连通图,广度优先搜索是从图的某个顶点v0出发,在出发,在访问访问v0之后,依次搜索访问之后,依次搜索访问v0的各个未被
25、访问过的邻接点的各个未被访问过的邻接点w1,w2,。然后顺序搜索访问然后顺序搜索访问w1的各未被访问过的邻接点,的各未被访问过的邻接点,w2的各未的各未被访问过的邻接点,被访问过的邻接点,。即从。即从v0开始,由近至远,按层次依次访问开始,由近至远,按层次依次访问与与v0有路径相通且路径长度分别为有路径相通且路径长度分别为1,2,的顶点,直至连通图中的顶点,直至连通图中所有顶点都被访问一次。所有顶点都被访问一次。广度优先搜索的顺序不是唯一的,例如图广度优先搜索的顺序不是唯一的,例如图6-10(a)连通图的广度连通图的广度优先搜索遍历顺序可为优先搜索遍历顺序可为v1,v2,v3,v4,v5,v6
展开阅读全文