《数据结构》课件第7章(图).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《数据结构》课件第7章(图).ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件
- 资源描述:
-
1、基本术语基本术语 图是由图是由顶点的非空有穷集合顶点的非空有穷集合与与顶点之间关系顶点之间关系(边或弧边或弧)的集合的集合构成的结构构成的结构,通常表示为通常表示为 G=(V,E)其中其中,V 为顶点集合为顶点集合,E 为关系为关系(边或弧边或弧)的集合的集合.一一.图的定义图的定义(b)这条边依附于顶点这条边依附于顶点vi 和和vj。(vi,vj)vjvivjvi 关于一条边或弧的表示方法关于一条边或弧的表示方法:(1)用图形用图形:(2)用符号用符号:(3)用语言用语言:(a)顶点顶点vi 与与vj 是这条边的两个邻接点。是这条边的两个邻接点。v1v2v3v4 其中其中 V1=v1,v2,
2、v3,v4 E1=(v1,v2),(v1,v3),(v1,v4),(v2,v3),(v2,v4),(v3,v4)G1=(V1,E1)v1v2v3v4其中其中 V2=v1,v2,v3,v4 E2=,G2=(V2,E2)无向图:无向图:有向图:有向图:与边有关的数据称为与边有关的数据称为权权,边上带权的图称为边上带权的图称为网络网络。二二.图的分类图的分类对于对于(vi,vj)E,必有必有(vj,vi)E,并且偶对中顶,并且偶对中顶点的前后顺序无关。点的前后顺序无关。若 E是顶点的有序偶对。是顶点的有序偶对。网网(络络):v1v2v3v4v1v2v3v4v1v2v3v4104178 1.顶点的度顶
3、点的度对于有向图而言对于有向图而言,有有:顶点的顶点的出度出度:以顶点以顶点vi 为出发点的边的数目为出发点的边的数目,记为记为OD(vi).顶点的顶点的入度入度:以顶点以顶点vi 为终止点的边的数目为终止点的边的数目,记为记为ID(vi).TD(vi)=OD(vi)+ID(vi)三三.名词术语名词术语依附于顶点依附于顶点vi的边的数目的边的数目,记为记为TD(vi).v1v3v4v1v2v3v4v2 边的数目达到最大的图称为完全图边的数目达到最大的图称为完全图.边的数目达边的数目达到或接近最大的图称为稠密图到或接近最大的图称为稠密图,否则否则,称为稀疏图称为稀疏图.具有具有n个顶点的有向图最
4、多有个顶点的有向图最多有n(n-1)条边条边.具有具有n个顶点的无向图最多有个顶点的无向图最多有n(n-1)/2 条边条边.对于具有对于具有n个顶点个顶点,e条边的图条边的图,有有 2e=TD(vi)ni=1结论结论1结论结论2结论结论3 2.路径路径DCEBAP(A,E):A,B,E A,C,D,E 出发点与终止点相同的路径称为回路或环;顶点序列中出发点与终止点相同的路径称为回路或环;顶点序列中顶点不重复出现的路径称为简单路径。不带权的图的路径长顶点不重复出现的路径称为简单路径。不带权的图的路径长度是指路径上所经过的边的数目,带权的图的路径长度是指度是指路径上所经过的边的数目,带权的图的路径
5、长度是指路径上经过的边上的权值之和。路径上经过的边上的权值之和。顶点顶点vx到到vy之间有路径之间有路径P(vx,vy)的充分必要条件为的充分必要条件为:存存在顶点序列在顶点序列 vx,vi1,vi2,vim,vy,并且序列中相邻两个顶并且序列中相邻两个顶点构造的顶点偶对分别为图中的一条边。点构造的顶点偶对分别为图中的一条边。3.子图子图 v1v2v3v4 对于图对于图G=(V,E)与与 G=(V,E),若有若有V V,E E,则称则称G 为为G的一个子图的一个子图.v1v2v3v4v1v2 4.图的连通图的连通 无向图中顶点无向图中顶点vi 到到vj 有路径有路径,则称顶点则称顶点vi 与与
6、vj 是连通的。是连通的。若无向图中任意两个顶点都连通若无向图中任意两个顶点都连通,则称该无向图是连则称该无向图是连通的。通的。若有向图中顶点若有向图中顶点vi 到到vj 有路径有路径,并且顶点并且顶点vj 到到vi 也有路也有路径径,则称顶点则称顶点vi 与与vj 是连通的。是连通的。若有向图中任意两个顶点都连通若有向图中任意两个顶点都连通,则称该有向图是强则称该有向图是强连通的。连通的。(1)无向图的连通无向图的连通(2)有向图的连通有向图的连通 5.生成树生成树 包含具有包含具有n 个顶点的连通图个顶点的连通图G 的全部的全部n 个顶点个顶点,仅包仅包含其含其n-1条边的连通子图称为条边
7、的连通子图称为G 的一个生成树。的一个生成树。v1v3v4v2v1v3v4v2v1v3v4v2v1v3v4v2v1v3v4v2对于一个图对于一个图,需要存储的信息应该包括需要存储的信息应该包括:(1)所有顶点的数据信息;所有顶点的数据信息;(2)顶点之间关系顶点之间关系(边或弧边或弧)的信息的信息;(3)权的信息。权的信息。图的存储结构图的存储结构一一.邻接矩阵存储方法邻接矩阵存储方法1.定义一个一维数组定义一个一维数组VERTEX1:n存放图中所有顶点存放图中所有顶点 的数据信息的数据信息.2.定义一个二维数组定义一个二维数组A1:n,1:n存放图中所有顶点之存放图中所有顶点之 间关系的信息
8、间关系的信息(该数组被称为邻接矩阵该数组被称为邻接矩阵),),有有 1 当顶点当顶点vi到顶点到顶点vj有边时有边时Ai j=0 当顶点当顶点vi到顶点到顶点vj无边时无边时对于带权的图对于带权的图,有有 wij 当顶点当顶点vi到顶点到顶点vj有边有边,且边的权为且边的权为wij Ai j=当顶点当顶点vi到顶点到顶点vj无边时无边时oo0 1 1 11 0 1 11 1 0 11 1 1 0A1=v1v2v3v4Vertex11:4v1v2v3v4Vertex21:4 4 6 7 8 A2=v1v2v3v4v1v2v3104178邻接矩阵的类型定义如下邻接矩阵的类型定义如下:#define
9、 Vnum 图的顶点数图的顶点数enum adj0,1;typedef adj_adjmatrixvnumvnum adjmatrix;typedef struct VexType VexsVnum;/顶点的信息顶点的信息 adjmatrix arcs;/邻接矩阵邻接矩阵 graph;建立无向网邻接矩阵的算法如下建立无向网邻接矩阵的算法如下:void build-graph(graph&ga)for(i=0;in;i+)scanf(“%d”,ga.Vexsi);for(i=0;i+;in)for(j=0;j+;jn)ga.arcsij=maxint;for(k=0;k+;ke)/读入边读入边(
10、i,j)和权和权 scanf(“%d,%d,%d”,i,j,w);ga.arcsij=w;ga.arcsji=w;(1)无向图的邻接矩阵一定是一个对称矩阵无向图的邻接矩阵一定是一个对称矩阵;(2)不带权的有向图的邻接矩阵一般是一个稀疏矩阵不带权的有向图的邻接矩阵一般是一个稀疏矩阵;(3)无向图的邻接矩阵的第无向图的邻接矩阵的第i 行行(或第或第i 列列)非非0 或非或非 元素的个数为第元素的个数为第i 个顶点的度数个顶点的度数;(4)有向图的邻接矩阵的第有向图的邻接矩阵的第i 行非行非0或非或非 元素的个数为元素的个数为 第第i 个顶点的出度个顶点的出度;第第i 列非列非0或非或非 元素的个数
11、为第元素的个数为第 i 个顶点的入度。个顶点的入度。特点特点:二二.邻接表存储方法邻接表存储方法核心思想核心思想:对具有对具有n个顶点的图建立个顶点的图建立n个线性链表存储该图个线性链表存储该图.1.1.每一个链表前面设置一个头结点每一个链表前面设置一个头结点,用来存放一个顶点的用来存放一个顶点的 数据信息数据信息,称之为顶点结点称之为顶点结点.其结构为其结构为:vertexlink其中其中,vertex 域存放某个顶点的数据信息域存放某个顶点的数据信息;link 域存放某个链表中第一个结点的地址域存放某个链表中第一个结点的地址.2.2.第第i 个链表中的每一个链结点个链表中的每一个链结点(称
12、之为边结点称之为边结点)表示以第表示以第i 个顶点为出发点的一条边个顶点为出发点的一条边;边结点的构造为边结点的构造为nextweightadjvex其中其中,next 域为指针域域为指针域;weight 域为权值域域为权值域(若图不带权若图不带权,则无此域则无此域););adjvex 域存放以第域存放以第i 个顶点为出发点的一条边个顶点为出发点的一条边 的另一端点在头结点数组中的位置的另一端点在头结点数组中的位置.n个头结点之间为一数组结构个头结点之间为一数组结构.1234v1v2v3v447861233 (1)无向图的第无向图的第i 个链表中边结点的个数是第个链表中边结点的个数是第i 个顶
13、点度数个顶点度数.(2)有向图的第有向图的第i 个链表中边结点的个数是第个链表中边结点的个数是第i 个顶点的出度。个顶点的出度。特点特点:1234v1 v3v2v4234332411421v1v2v3v4v1v2v3v46478typedef struct edgenode int adjvex;/该边所指向的顶点的序号该边所指向的顶点的序号 float weight;/边上的权值边上的权值 struct edgenode*next;/指向下一条弧的指针指向下一条弧的指针*edgeptr;typedef struct VerType vertex;edgeptr link;vexnode;ty
14、pedef vexnode Adj_ListMAX_VERTEX_NUM;邻接表的类型定义邻接表的类型定义void build_adjlist(Adj_List ga)scanf(“%d,%d”,&n,&e);/读入顶点数,边数读入顶点数,边数e for(i=0;in;i+)/初始化邻接表初始化邻接表 gai.vertex=i;gai.link=NULL;for(k=0;ke;k+)scanf(“%d,%d”,&i,&j);/读入顶点对读入顶点对 p=new struct edgenode;p-adjvex=j;p-next=gai.link;gai.link=p;建立图的邻接表的算法:建立图
15、的邻接表的算法:1234v1v2v3v464127284关于逆邻接表关于逆邻接表v1v2v3v46478三三.十字链表存储方法十字链表存储方法 在用邻接表表示有向图时,有时需要同时使用邻接表和在用邻接表表示有向图时,有时需要同时使用邻接表和逆邻接表。用有向图的十字链表可把这两个结合起来表示。逆邻接表。用有向图的十字链表可把这两个结合起来表示。其中,其中,tail和和head 分别表示弧的尾顶点和头顶点;分别表示弧的尾顶点和头顶点;dut是弧的权值;是弧的权值;hlink 链接以链接以head为头的另一条弧;为头的另一条弧;tlink链接以链接以tail为尾的另一条弧。为尾的另一条弧。另外,设立
16、一个由另外,设立一个由n个表头结点构成的向量,每个表头结点存放一个顶个表头结点构成的向量,每个表头结点存放一个顶点,其结构也由上述五个域组成,点,其结构也由上述五个域组成,head域存放该顶域存放该顶点的入度;点的入度;tail域存放出度域存放出度;hlink链接以该顶点为头链接以该顶点为头的弧;的弧;tlink链接以该顶点为尾的弧。链接以该顶点为尾的弧。tailheadduttlinkhlink0 03 03 00 00 01 2 63 4 70 02 3 22 4 50 00 03 4 800121436781234123452 在邻接多重表中在邻接多重表中,每一条边只有一个边结点。边结点
17、的结每一条边只有一个边结点。边结点的结构如下:构如下:mark vertex1 vertex2 path1 path2 其中其中,mark 是记录是否处理过的标记是记录是否处理过的标记;vertex1和和vertex2是该边两顶点位置。是该边两顶点位置。path1域指向下一条依附于顶点域指向下一条依附于顶点vertex1的边;的边;path2 是指向下一条依附于顶点是指向下一条依附于顶点vertex2的边。的边。四四.邻接多重表存储方法邻接多重表存储方法 顶点结点的结构顶点结点的结构 存储顶点信息的结点表以顺序表方式组织存储顶点信息的结点表以顺序表方式组织,每一个顶每一个顶点结点有两个数据域:
18、其中,点结点有两个数据域:其中,data 存放与该顶点相关的信存放与该顶点相关的信息,息,Firstout 是指示第一条依附该顶点的边的指针。在邻是指示第一条依附该顶点的边的指针。在邻接多重表中接多重表中,所有依附于同一个顶点的边都链接在同一个所有依附于同一个顶点的边都链接在同一个单链表中。单链表中。data FirstoutA DEFCBABCDEF12345623461341245123534615例:例:已知一具有已知一具有n个顶点的无向图个顶点的无向图G采用邻接表存储方法采用邻接表存储方法,写一算法写一算法,删除图中数据信息为删除图中数据信息为item 的那个顶点的那个顶点.需要做的工
19、作需要做的工作:(1)寻找满足条件的那个顶点寻找满足条件的那个顶点;(2)从头结点数组中删除该顶点从头结点数组中删除该顶点;(3)删除与该顶点相关的边删除与该顶点相关的边;(4)修改有关的边结点的修改有关的边结点的adjvex 域的内容。域的内容。A DEFCBABCDEF12345623461341245123534615A DEFCBABDEFF123456235131243514void Del(g,n,item)k=0;for(i=1;i=n;i+)if(gi.vertex=item)k=i;break;if(k=0)return;p=gk.link;for(i=k+1;inext;d
20、elete q;for(i=1;iadjvex=k)if(gi.link=p)gi.linki=p-next;else q-next:=p-next;r=p;p=p-next;delete r;else if(p-adjvex k)p-adjvex=p-adjvex1;q=p;p=p-next;从图中某个指定的顶点出发从图中某个指定的顶点出发,按照某一原则对图中按照某一原则对图中 所有顶点都访问一次所有顶点都访问一次,得到一个由图中所有顶点组成的得到一个由图中所有顶点组成的 序列序列,这一过程称为图的遍历这一过程称为图的遍历.原则原则:从图中某个指定的顶点从图中某个指定的顶点v v出发出发,先
21、访问顶点先访问顶点v,v,然后从顶然后从顶点点v v未被访问过的一个邻接点未被访问过的一个邻接点W1W1出发出发,访问了顶点访问了顶点W1W1后,再从后,再从W1W1出发,访问和出发,访问和W1W1邻接且未被访问过的任意顶点邻接且未被访问过的任意顶点W2W2,然后从,然后从W2W2出发进行如上访问,重复,直到某一顶点所有邻接点都被出发进行如上访问,重复,直到某一顶点所有邻接点都被访问过时,接着退回到尚有邻接点未被访问过的顶点,再从访问过时,接着退回到尚有邻接点未被访问过的顶点,再从该顶点出发,重复上述过程,直到所有的被访问过的顶点的该顶点出发,重复上述过程,直到所有的被访问过的顶点的邻接点都已
22、被访问为止。邻接点都已被访问为止。一一.深度优先搜索深度优先搜索图的遍历图的遍历 为了标记某一时刻图中哪些顶点是否被访问为了标记某一时刻图中哪些顶点是否被访问,定定义一维数组义一维数组visited1:n,有有 1 表示表示第第i个顶点已经被访问个顶点已经被访问 visitedi=0 表示表示第第i个顶点还未被访问个顶点还未被访问 例如:用深度优先搜索法遍历下图例如:用深度优先搜索法遍历下图。12345678 2 3 1 4 5 1 6 7 2 8 2 8 3 8 3 8 4 5 6 7 V1V2V3V4V5V6V7V812345678void dfs(Adj_List g,int v0)/从
23、从v0出发,深度优先遍历图出发,深度优先遍历图g,g以邻接表为存储结构以邻接表为存储结构 printf(“%d”,v0);visitedv0=1;/标志标志v0已访问已访问 p=gv0.link;/找找v0的第一个邻接点的第一个邻接点 while(p!=NULL)if(visitedp-adjvex=0)dfs(g,p-adjvex);p=p-next;/回溯回溯找找v0的下一个邻接点的下一个邻接点 深度优先搜索的递归算法:深度优先搜索的递归算法:void dfs(Adj_List g,int v0)top=0;printf(“%d”,v0);visitedv0=1;/标志标志v0已访问已访问
24、 p=gv0.link;/找找v0的第一个邻接点的第一个邻接点 while(p!=NULL|top0)while(p!=NULL)if(visitedp-adjvex=1)p=p-next;/找找v0的下一个邻接点的下一个邻接点 else w=p-adjvex;printf(“%d”,w);visitedw=1;top+;Stop=p;p=gw.link;if(top 0)p=Stop;top-;p=p-next;深度优先搜索的非递归算法:深度优先搜索的非递归算法:分析上述过程分析上述过程,在遍历图时在遍历图时,对图中每个顶点至多调用对图中每个顶点至多调用一次一次dfsdfs过程,因为一旦某个
25、顶点被标志成已被访问,就过程,因为一旦某个顶点被标志成已被访问,就不再从它出发进行搜索。因此,遍历图的过程实质上是对不再从它出发进行搜索。因此,遍历图的过程实质上是对每个顶点查找其邻接点的过程。其耗费的时间则取决于所每个顶点查找其邻接点的过程。其耗费的时间则取决于所采用的存储结构,当用二维数组表示邻接矩阵作图的存储采用的存储结构,当用二维数组表示邻接矩阵作图的存储结构时,查找每个顶点的邻接点所需时间为结构时,查找每个顶点的邻接点所需时间为O(nO(n2 2),),其中其中n n为为图中顶点数图中顶点数;而当以邻接表作图的存储结构时,查找邻接而当以邻接表作图的存储结构时,查找邻接点所需时间为点所
展开阅读全文