ImageVerifierCode 换一换
格式:PPT , 页数:41 ,大小:355KB ,
资源ID:6952705      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6952705.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《数据结构教程》第7章 图.ppt)为本站会员(hskm5268)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

《数据结构教程》第7章 图.ppt

1、2019/4/28,1,7.1 图7.2 图的存储结构 7.3 图的实现7.4 图的遍历7.5 最小生成树7.6 最短路径,第7章 图,2019/4/28,2,7.1.1 图的定义及运算 一、图的定义:图(graph)是由两个集合V和E所限定的一种数据结构,记作 G=(V,E) 其中:V是构成图的顶点的非空有限集, E是表示顶点之间关系的边的集合。,7.1 图的基本概念,2019/4/28,3,(4)子图:假设有两个图G = ( V ( G ) , E ( G ) )和G= ( V ( G ) , E ( G ) ) 。若V(G)V(G)且E(G)E(G),则称G是G的。,(1)无向图:边没有

2、方向性; (2)有向图:边有方向性。 (3)完全图:图任意两个顶点都有一条边相 连接;若 n 个顶点的无向图有 n(n-1)/2 条边, 称为无向完全图若 n 个顶点的有向图有n(n-1) 条边, 称为有向完全图,2019/4/28,4,二、图的运算 (1) CreateGraph(&G,V,E): 根据顶点集V和边集E创建图G. (2) DestroyGraph(&G): 销毁图G. (3) FirstAdjVex(G,v): 求图G中顶点v的第一个邻接顶点. (4) NextAdjVex(G,v,w): 求图G中顶点v的相对于其邻接顶点w的下一个邻接顶点.,2019/4/28,5,(5)

3、InsertVex(&G,v): 在图G中插入顶点v. (6) DeleteVex(&G,v): 在图G中删除顶点v及其与v相关的边. (7) InsertArc(&G,v,w): 在图G中插入边(v,w)或. (8) DeletArc(&G,v,w): 在图G中删除边(v,w)或. (9) DFSTraverse(G,v): 从图G的v顶点出发,深度优先遍历图. (10) BFSTraverse(G,v): 从图G的v顶点出发,广度优先遍历图.,2019/4/28,6,7.1.2 图的基本术语,1、顶点(Vertex) :双重标记法;,2、边(edge) (1)无向边(i,j)=(j,i)

4、(2)有向边(弧(arc) )。称i为弧尾(始点),j称为弧头(终点),2019/4/28,7,4、路径 从顶点i到顶点j之间由边或弧组成通路。 路径长度:路径上所含边的数目 回路或环(Cycle) : 路径上第1个顶点与最后一个顶点相同的路径 简单路径:路径的顶点序列中无重复顶点的路径 简单回路:除第1个顶点与最后一个顶点相同之外,其余顶点不重复出现的回路,2019/4/28,8,连通图:图中任意两顶点都是互相可达的无向图 连通分量:无向图的极大连通子图 强连通图:任意两个顶点间都互相可达的有向图 强连通分量:有向图的极大强连通子图,2019/4/28,9,树图:一个不含回路的无向连通图,是

5、一个极小连通子图,它含有图中全部n个顶点,但只有n-1条边。树图中所有顶点是同等的,无须指定其中一个顶点为根。,2019/4/28,10,5、权: 有时图中的每条边上都对应一个数值,这个数值称为边上的权。 网络:带权的图 在网络中的路径长度是这些边上的权值之和。,2019/4/28,11,7.2 图的存储表示,7.2.1 邻接矩阵表示法:个一维数组表示顶点,#define MAXVER 21 /* MAXVER-1为图中至多顶点数 */ #define INFINITY INT_MAX /* 表示的权值 */ typedef struct vextype vexsMAXVER ;int arc

6、sMAXVERMAXVER ;int vexnum , arcnum ; Mgraph ;,2019/4/28,12,2019/4/28,13,2019/4/28,14,2019/4/28,15,2019/4/28,16,特 点,(1) 无向图的邻接矩阵具有如下的特点: 1)它是对称阵(因为(i , j) = ( j , i) ); 2)第i行(或第i列)上1元素的个数等于顶点i的度数; 3)整个矩阵中1元素的个数等于边数的2倍;,2019/4/28,17,(2) 有向图邻接矩阵具有如下特点: 1)一般情况下,它不是对称阵(因为 ); 2)第i行上1元素的个数等于顶点i的出度; 3)第i列上1

7、元素的个数等于顶点i的入度; 4)整个矩阵中1元素的个数等于弧数;,2019/4/28,18,7.2.2 邻接表表示法,图的邻接表表示的存储结构类型定义如下: #define MAXVER 21 #define MAXVER 21 typedef struct listnode typedef struct wlistnode int adjvex ; int adjvex , weight;struct listnode * next ; struct wlistnode * next;listnode; wlistnode ; typedef struct typedef struct v

8、extype data ; vextype data; listnode *first ; wlistnode * first;headnode ; wheadnode ; typedef struct typedef struct headnode vexsMAXVER ; wheadnode vexsMAXSIZE ;int vexnum , arcnum ; int vexnum , arcnum ;ALgraph ; WALgraph ;,2019/4/28,19,2019/4/28,20,2019/4/28,21,2019/4/28,22,出度,入度,2019/4/28,23,根据各

9、种图的邻接表存储结构,可以得出如下结论: (1) 对于无向图和无向网的邻接表: 1)第i个单链表的长度等于顶点i的度数; 2)总表结点数等于边数的2倍。 (2) 对于有向图和有向网的邻接表: 1)第i个单链表的长度等于顶点i的出度; 2)总表结点数等于弧数。,2019/4/28,24,3、讨论:邻接表与邻接矩阵有什么异同之处?,1. 联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。 2. 区别: 对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。,2019/4/28,25, 邻接矩阵的空间复杂度为O(

10、n2),而邻接表的空间复杂度为O(n+e)。 3. 用途: 邻接矩阵多用于稠密图的存储(e接近n(n-1)/2); 而邻接表多用于稀疏图的存储(en2),2019/4/28,26,7.2.3 图的其它存储表示法,1. 邻接多重表(adjacency multilist)每条边只用一个结点表示,,#define MAXVER 21 typedef struct edgenode int mark,ivex,jvex; struct edgenode *ilink,*jlink;int weight; edgenode; typedef struct,2019/4/28,27,vertype da

11、ta;edgenode *firstedge;vexnode; typedef struct vexnode vexsMAXVER;int vexnum,edgenum; AMLgraph;,2019/4/28,28,2019/4/28,29,2019/4/28,30,2. 十字链表(orthogonal list),十字链表是有向图的另一种链式存储结构,可以将它看作是将有向图的邻接表和逆邻接表结合起来而得到的一种链表。,2019/4/28,31,2019/4/28,32,2019/4/28,33,7.2.4 图的存储结构的建立,/* 图的邻接矩阵存储结构创建算法 */ Mgraph crea

12、teMgraph( ) Mgraph G;int i,j,k,code,w;char ch;printf(“输入图的顶点数,边数:”);scanf(“%d,%d”,i+),2019/4/28,34,printf(“ n输入第%d个顶点信息 ”,I );scanf(“%c”,2019/4/28,35,case 2: for(i=1,i=G.vexnum;i+)for(j=1;j=G.vexnum;j+)G.arcsij=0;for(k=1;k=G.arcnum;k+)printf(“ n输入第%d条弧的始点,终点:”,k );scanf(“%d,%d”,scanf(“%d,%d”,2019/4/

13、28,36,case 3: for(i=1,i=G.vexnum;i+) /* 初始化主对角线元素为0,其它元素为 */for(j=1;j=G.vexnum;j+)if(i= =j)G.arcsij=0;elseG.arcsij=INFINITY;for(k=1;k=G.arcnum;k+)printf(“ n输入第%d条边的始点,终点和权:”,k );,2019/4/28,37,scanf(“%d,%d,%d”,k+),2019/4/28,38,printf(“ n输入第%d条弧的始点,终点和权:”,k );scanf(“%d,%d,%d”, /* createMgraph */,2019/

14、4/28,39,/* 无向图的邻接表存储结构创建算法 */ ALgraph createALgraph() ALgraph G;int i,s,d;listnode *p,*q;printf(“输入图的顶点数和边数:”);scanf(“%d,%d”,2019/4/28,40, /* for */ for(i=1;iadjvex=d;p-next=G.vexss.first;,2019/4/28,41,G.vexss.first=p;q=(listnode*)malloc(sizeof(listnode); /* 形成d单链表的表结点q并插入到表头位置 */q-adjvex=s;q-next=G.vexsd.first;G.vexsd.first=q; /* for */return(G); /* createALgraph */,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报