数据结构和算法分析第6讲-图课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构和算法分析第6讲-图课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 算法 分析 课件
- 资源描述:
-
1、Chapter 6Graphs图的类型定义图的类型定义 n(n0)个元素的有个元素的有限集合限集合基基 本本 术术 语语 图图是由一个是由一个顶点集顶点集V和一个和一个弧集弧集VR构构 成的数据结构成的数据结构 Graph=(V,VR)其中其中:VR|v,wV 且且 P(v,w)表示从表示从 v 到到 w 的一条弧,并称的一条弧,并称 v 为为弧尾弧尾,w 为为弧头弧头 谓词谓词 P(v,w)定义了弧定义了弧 的意义的意义或信息或信息 由于由于“弧弧”是有方向的,因此称由是有方向的,因此称由 顶点集和弧集构成的图为顶点集和弧集构成的图为有向图有向图 AB E C D 例如例如:G1=(V1,V
2、R1)其中其中:V1=A,B,C,D,EVR1=,若有若有 VR,必必有有 VR,则称则称(v,w)为顶点为顶点v和顶和顶点点w之间存在一条之间存在一条边边 B CA D F E由顶点集和边集构由顶点集和边集构成的图称作成的图称作无向图无向图例如例如:G2=(V2,VR2)V2=A,B,C,D,E,FVR2=,名词和术语名词和术语网、子图网、子图 完全图完全图、稀疏图、稠密图稀疏图、稠密图邻接点、度、入度、出度邻接点、度、入度、出度路径、路径长度、简单路径路径、路径长度、简单路径、简单回路简单回路连通图、连通分量、连通图、连通分量、强连通图、强连通分量强连通图、强连通分量生成树、生成森林生成树
3、、生成森林关节点、重连通图关节点、重连通图重连通分量、连通度重连通分量、连通度AEFBBC设图设图G=(V,VR)和和图图G=(V,VR ),且且VV,VRVR,则则称称 G 为为 G 的的子图子图ABECF1597211132弧或边带权的图分弧或边带权的图分别称作别称作有向网有向网或或无无向网向网假设图中有假设图中有 n 个顶点,个顶点,e 条边,则条边,则 含有含有 e=n(n-1)/2 条边的无向图称条边的无向图称作作无向完全图无向完全图 含有含有 e=n(n-1)条弧的有向图称条弧的有向图称作作有向完全图有向完全图 若边或弧的个数若边或弧的个数 enlogn,则称,则称作作稀疏图稀疏图
4、,否则称作,否则称作稠密图稠密图 假若顶点假若顶点v 和顶点和顶点w 之间存在一条之间存在一条边,则称顶点边,则称顶点v和和w互为互为邻接点邻接点,边,边(v,w)(v,w)ID(B)=3ID(A)=2和顶点和顶点v和和w相相关联关联 和顶点和顶点v 关联的边的数目定义为顶关联的边的数目定义为顶点的点的度度ACDFEB顶点的顶点的出度出度:以顶点以顶点v为弧尾的弧的数目为弧尾的弧的数目ABECF有向图有向图顶点的顶点的入度入度:以顶点以顶点v v为弧头的弧的数目为弧头的弧的数目顶点的顶点的度度(TD)=)=出度出度(OD)+)+入度入度(ID)ID(B)=2OD(B)=1TD(B)=3设图设图
5、G=(V,VR)中的一个顶点序列中的一个顶点序列 u=vi,0,vi,1,vi,m=w中中,(vi,j-1,vi,j)VR 1jm,则称从顶点则称从顶点u 到顶点到顶点w 之之间存在一条间存在一条路径路径。路径上。路径上边的数目称作边的数目称作路径长度路径长度ABECF长度为长度为3的路径的路径A,B,C,FABECF简单路径简单路径:序列中顶点序列中顶点不重复出现的路径不重复出现的路径简单回路简单回路:序列中第一序列中第一个顶点和最后一个顶个顶点和最后一个顶点相同的路径点相同的路径若图若图G中任意两个中任意两个顶点之间都有路径顶点之间都有路径相通,则称此图为相通,则称此图为连通图连通图若无向
6、图为非连通若无向图为非连通图,则图中各个极图,则图中各个极大连通子图称作此大连通子图称作此图的图的连通分量连通分量BACDFEBACDFE 若任意两个顶点之间若任意两个顶点之间都存在一条有向路径,则称此有向图都存在一条有向路径,则称此有向图为为强连通图强连通图,ABECFABECF对有向图,对有向图,否则,其各个强连通子否则,其各个强连通子图称作它的图称作它的强连通分量强连通分量假设一个连通图有假设一个连通图有n个顶点和个顶点和e条边,其条边,其中中n-1 条边和条边和n个顶点构成一个极小连通个顶点构成一个极小连通子图,称该极小连通子图为此连通图的子图,称该极小连通子图为此连通图的生成树生成树
7、对非连通图,则对非连通图,则称由各个连通分称由各个连通分量的生成树的集量的生成树的集合为此非连通图合为此非连通图的的生成森林生成森林BACDFE 没有关节点的连通图被称为没有关节点的连通图被称为重连重连通图通图 若连通图中的某个顶点和其相关若连通图中的某个顶点和其相关联的边被删去之后,该连通图被分割联的边被删去之后,该连通图被分割成两个或两个以上的连通分量,则称成两个或两个以上的连通分量,则称此顶点为此顶点为关节点关节点 一个连通图一个连通图G G如果不是重连通图,如果不是重连通图,那么它可以包括几个那么它可以包括几个重连通分量重连通分量 若依次删除一个连通图中的若依次删除一个连通图中的 1,
8、2,k-11,2,k-1个顶点后个顶点后,该图仍连通该图仍连通,删除第删除第k k个顶个顶点后该图成为不连通的点后该图成为不连通的,则称该图的则称该图的连通度连通度为为k k结构的建立和销毁结构的建立和销毁插入或删除顶点插入或删除顶点对邻接点的操作对邻接点的操作对顶点的访问操作对顶点的访问操作顶点的遍历顶点的遍历插入和删除弧插入和删除弧基本操作基本操作CreatGraph(&G,V,VR):/按定义按定义(V,VR)构造图构造图DestroyGraph(&G):/销毁图销毁图结构的建立和销毁结构的建立和销毁对顶点的访问操作对顶点的访问操作LocateVex(G,u);/若若G中存在顶点中存在顶
9、点u,则返回该顶点在,则返回该顶点在/图中图中“位置位置”;否则返回其它信息;否则返回其它信息GetVex(G,v);/返回返回 v 的值的值PutVex(&G,v,value);/对对 v 赋值赋值value对邻接点的操作对邻接点的操作FirstAdjVex(G,v);/返回返回v的的“第一个邻接点第一个邻接点”。若该顶点。若该顶点 /在在G中没有邻接点,则返回中没有邻接点,则返回“空空”NextAdjVex(G,v,w);/返回返回v的(相对于的(相对于w的)的)“下一个邻接下一个邻接/点点”。若。若w是是v的最后一个邻接点,则的最后一个邻接点,则/返回返回“空空”插入或删除顶点插入或删除
10、顶点InsertVex(&G,v);/在图在图G中增添新顶点中增添新顶点vDeleteVex(&G,v);/删除删除G中顶点中顶点v及其相关的弧及其相关的弧插入和删除弧插入和删除弧InsertArc(&G,v,w);/在在G中增添弧中增添弧,若,若G是无向的,是无向的,/则还增添对称弧则还增添对称弧DeleteArc(&G,v,w);/在在G中删除弧中删除弧,若,若G是无向的,是无向的,/则还删除对称弧则还删除对称弧遍遍 历历DFSTraverse(G,v,Visit();/从顶点从顶点v起起深度优先深度优先遍历图遍历图G,并对每,并对每/个顶点调用函数个顶点调用函数Visit一次且仅一次一次
11、且仅一次BFSTraverse(G,v,Visit();/从顶点从顶点v起起广度优先广度优先遍历图遍历图G,并对每,并对每/个顶点调用函数个顶点调用函数Visit一次且仅一次一次且仅一次图的存储表示图的存储表示一、图的数组一、图的数组(邻接矩阵邻接矩阵)存储表示存储表示二、图的邻接表存储表示二、图的邻接表存储表示四、有向图的十字链表存储表示四、有向图的十字链表存储表示 五、无向图的邻接多重表存储表示五、无向图的邻接多重表存储表示三、图的逆邻接表存储表示三、图的逆邻接表存储表示Aij=0 (i,j)VR1 (i,j)VR图的数组(邻接矩阵)存储表示BACDFE定义定义:矩阵的元素为矩阵的元素为有
12、向图的邻接矩有向图的邻接矩阵为非对称矩阵阵为非对称矩阵ABECD0 1 0 0 10 0 1 0 00 0 0 1 01 1 0 0 00 0 1 0 0网(边或弧带权值的图)的数组(邻接矩阵)存储表示如下否则或如VRvvvvwAjijiijij),(,5935531822520 A 1 41 B 0 4 52 C 3 53 D 2 54 E 0 15 F 1 2 3BACDFE图的邻接表存储表示图的邻接表存储表示 0 1 2 3 4有向图的邻接表有向图的邻接表1 4230 12 A B C D EABECD可见,在有向图的可见,在有向图的邻接表中不易找到邻接表中不易找到指向该顶点的弧指向该顶
13、点的弧ABECD在有向图的在有向图的邻接表中,邻接表中,对每个顶点,对每个顶点,链接的是指链接的是指向该顶点的向该顶点的弧弧图的逆邻接表存储表示图的逆邻接表存储表示 A B C D E 033420 012341有向图的十字链表存储表示有向图的十字链表存储表示 弧的结点结构弧的结点结构弧尾顶点位置 弧头顶点位置 弧的相关信息指向下一个有相同弧头有相同弧头的结点指向下一个有相同弧尾有相同弧尾的结点typedef struct ArcBox /弧的结构表示弧的结构表示 int tailvex,headvex;InfoType *info;struct ArcBox *hlink,*tlink;Ve
14、xNode;顶点的结点结构顶点的结点结构顶点信息数据 指向该顶点的第一条入弧第一条入弧指向该顶点的第一条出弧第一条出弧typedef struct VexNode /顶点的结构表示顶点的结构表示 VertexType data;ArcBox *firstin,*firstout;VexNode;typedef struct VexNode xlistMAX_VERTEX_NUM;/顶点结点(表头向量)int vexnum,arcnum;/有向图的当前顶点数和弧数 OLGraph;有向图的结构表示有向图的结构表示(十字链表十字链表)对右边所示的有向图G,十字链表表示如下:无向图的邻接多重表存储表
15、示typedef struct Ebox VisitIf mark;/访问标记 int ivex,jvex;/该边依附的两个顶点的位置 struct EBox *ilink,*jlink;InfoType *info;/该边信息指针 EBox;边的结构表示边的结构表示typedef struct /邻接多重表邻接多重表 VexBox adjmulistMAX_VERTEX_NUM;int vexnum,edgenum;AMLGraph;顶点的结构表示顶点的结构表示typedef struct VexBox VertexType data;EBox *firstedge;/指向第一条依附该顶点的
16、边 VexBox;无向图的结构表示无向图的结构表示对右边所示的无向图G,邻接多重表表示如下:图的遍历图的遍历前进前进回退回退ACDEGBFIHACDEGBFIH123456789123456789深度优先遍历过程深度优先遍历过程 深度优先生成树深度优先生成树ACDEGBFIHACDEGBFH123456789123456789广度优先遍历过程广度优先遍历过程 广度优先生成树广度优先生成树Ivoid traverse(int n,Graph g)for(v=0;v n;v+)visitedv=false;for(v=0;v n;v+)if(!visitedv)dfs(v,g)或或 bfs(v,g
17、);void dfs(int v,Graph g)cout=0;w=NextAdjVex(g,v,w)if(!visitedw)dfs(w,g)void bfs(int v,Graph g)cout=0;w=NextAdjVex(g,v,w)if(!visitedw)cout GetVex(g,w);EnQueue(q,w);visitedw =true;最小代价生成树最小代价生成树(minimum cost spanning tree)假设要在假设要在 n 个城市之间建立通讯个城市之间建立通讯联络网,则连通联络网,则连通 n 个城市只需要修建个城市只需要修建 n-1 条线路,条线路,如何在最
18、节省经费的前如何在最节省经费的前提下建立提下建立这个这个通讯网通讯网?问题问题 构造网的一棵最小生成树,即:构造网的一棵最小生成树,即:在在 e 条带权的边中选取条带权的边中选取n-1条边(不条边(不构成回路),使构成回路),使“权值之和权值之和”为最小为最小该问题等价于该问题等价于构造最小生成树的准则构造最小生成树的准则n必须使用且仅使用该网络中的必须使用且仅使用该网络中的n-1 条边来联结网络中的条边来联结网络中的 n 个顶点个顶点n不能使用产生回路的边不能使用产生回路的边n各边上的权值的总和达到最小各边上的权值的总和达到最小算法二:克鲁斯卡尔算法算法二:克鲁斯卡尔算法 算法一:普里姆算法
19、算法一:普里姆算法 (Prim)普里姆算法的普里姆算法的基本思想基本思想 1.取图中任意一个顶点取图中任意一个顶点 v 作为作为 生成树的根,之后往生成树生成树的根,之后往生成树 上添加新的顶点上添加新的顶点 w 2.在在生成树的构造过程中,图中生成树的构造过程中,图中 n 个个顶点分属两个集合:顶点分属两个集合:已落在生成树上的顶点已落在生成树上的顶点集集 U 和和尚未落在生成树上的顶点集尚未落在生成树上的顶点集V-U,则则应在所有连通应在所有连通U中顶点和中顶点和V-U中顶点的边中选中顶点的边中选取权值最小的边取权值最小的边(v,w)这里这里v属于属于V-U,w属于属于UUV-U 3.之后
展开阅读全文