数据结构第6章-图课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构第6章-图课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件
- 资源描述:
-
1、Email:李冬梅北京林业大学信息学院图第6章数据结构(C语言版)(第2版)线性结构 一个对一个,如线性表、栈、队列树形结构 一个对多个,如树集合 数据元素间除“同属于一个集合”外,无其它关系图形结构 多个对多个,如图逻辑结构目 录 导 航6.16.26.36.46.56.66.7图的定义和基本术语案例引入图的类型定义图的存储结构图的遍历图的应用案例分析与实现Contents掌握:图的基本概念及相关术语和性质熟练掌握:图的邻接矩阵和邻接表两种存储表示方法熟练掌握:图的两种遍历方法DFS和BFS熟练掌握:最短路算法(Dijkstra算法)掌握:最小生成树的两种算法及拓扑排序算法的思想01OPTI
2、ON02OPTION03OPTION04OPTION05OPTIONtarget目标图的定义和术语V1V2V3V4G1V1V2V4V5G2V3 图:Graph=(V,E)V:顶点(数据元素)的有穷非空集合;E:边的有穷集合。无向图:有向图:每条边都是无方向的每条边都是有方向的完全图:任意两个点都有一条边相连无向完全图有向完全图n(n-1)/2 条边n(n-1)条边图的定义和术语图的定义和术语稠密图有较多边或弧的图。邻接有边/弧相连的两个顶点之间的关系。存在(vi,vj),则称vi和vj互为邻接点;存在,则称vi邻接到vj,vj邻接于vi 稀疏图有很少边或弧的图。网边/弧带权的图。关联(依附):
3、边/弧与顶点之间的关系。存在(vi,vj)/,则称该边/弧关联于vi和vj顶点的度:与该顶点相关联的边的数目,记为TD(v)在有向图中,顶点的度等于该顶点的入度与出度之和。顶点 v 的入度是以 v 为终点的有向边的条数,记作 ID(v)顶点 v 的出度是以 v 为始点的有向边的条数,记作OD(v)问:当有向图中仅1个顶点的入度为0,其余顶点的入度均为1,此时是何形状?答:是树!而且是一棵有向树!图的定义和术语路径:接续的边构成的顶点序列。路径长度:路径上边或弧的数目/权值之和。回路(环):第一个顶点和最后一个顶点相同的路径。简单路径:除路径起点和终点可以相同外,其余顶点均不相同的路径。简单回路
4、(简单环):除路径起点和终点相同外,其余顶点均不相同的路径。图的定义和术语 非连通图 连通图 强连通图 非强连通图 V0 V1 V2 V3 V0 V4 V3 V1 V2 V0 V1 V2 V3 V0 V2 V3 V1 V5 V4连通图(强连通图)在无(有)向图G=(V,E)中,若对任何两个顶点 v、u 都存在从v 到 u 的路径,则称G是连通图(强连通图)。图的定义和术语(a)(b)(c)V0 V4 V3 V1 V2 V0 V4 V3 V1 V2 V0 V4 V3 V1 V2子图设有两个图G=(V,E)、G1=(V1,E1),若V1 V,E1 E,则称 G1是G的子图。例:(b)、(c)是(a
5、)的子图权与网图中边或弧所具有的相关数称为权。表明从一个顶点到另一个顶点的距离或耗费。带权的图称为网。图的定义和术语连通分量(强连通分量)非连通图 V0 V2 V3 V1 V5 V4无向图G 的极大连通子图称为G的连通分量。极大连通子图意思是:该子图是 G 连通子图,将G 的任何不在该子图中的顶点加入,子图不再连通。V0 V2 V3 V1 V5 V4连通分量图的定义和术语有向图G 的极大强连通子图称为G的强连通分量。极大强连通子图意思是:该子图是G的强连通子图,将D的任何不在该子图中的顶点加入,子图不再是强连通的。强连通分量 V0 V1 V2 V3 V0 V2 V3 V1图的定义和术语极小连通
6、子图:该子图是G 的连通子图,在该子图中删除任何一条边,子图不再连通。生成树:包含无向图G 所有顶点的极小连通子图。生成森林:对非连通图,由各个连通分量的生成树的集合。连通图 G1G1的生成树 V0 V4 V3 V1 V2 V0 V4 V3 V1 V2 V0 V4 V3 V1 V2图的定义和术语目 录 导 航6.16.26.36.46.56.66.7图的定义和基本术语案例引入图的类型定义图的存储结构图的遍历图的应用案例分析与实现Contents六度空间理论你和任何一个陌生人之间所间隔的人不会超过6个,也就是说,最多通过6个中间人你就能够认识任何一个陌生人。目 录 导 航6.16.26.36.4
7、6.56.66.7图的定义和基本术语案例引入图的类型定义图的存储结构图的遍历图的应用案例分析与实现Contents图的类型定义CreateGraph(&G,V,VR)初始条件:V是图的顶点集,VR是图中弧的集合。操作结果:按V和VR的定义构造图G。DFSTraverse(G)初始条件:图G存在。操作结果:对图进行深度优先遍历。BFSTraverse(G)初始条件:图G存在。操作结果:对图进行广度优先遍历。目 录 导 航6.16.26.36.46.56.66.7图的定义和基本术语案例引入图的类型定义图的存储结构图的遍历图的应用案例分析与实现Contents图的存储结构顺序存储结构数 组 表 示
8、法(邻接矩阵)链式存储结构多重链表邻接矩阵(数组)表示法邻接表(链式)表示法重点介绍邻接表邻接多重表十字链表 ,),(,.否否则则或或者者如如果果01AEjiEjijiEdgev 建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表 示各个顶点之间关系)。v 设图 A=(V,E)有 n 个顶点,则图的邻接矩阵是一个二维数 组 A.Edgenn,定义为:数组(邻接矩阵)表示法邻接矩阵:A.Edge=(v1 v2 v3 v4 v5 )v1v2v3v4v50 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0分析1:无向图的邻接矩阵是对称的;分析2:顶点i 的度第
9、 i 行(列)中1 的个数;特别:完全图的邻接矩阵中,对角元素为0,其余1。0 1 0 1 01 0 1 0 10 1 0 1 11 0 1 0 10 1 1 1 00 1 0 1 01 0 1 0 10 1 0 1 11 0 1 0 10 1 1 1 0顶点表:无向图的邻接矩阵表示法v1v2v3v5v4v4分析1:有向图的邻接矩阵可能是不对称的。分析2:顶点的出度=第i行元素之和 顶点的入度=第i列元素之和 顶点的度=第i行元素之和+第i列元素之和v1v2v3v4A邻接矩阵:A.Edge=(v1 v2 v3 v4)v1v2v3v40 0 0 00 0 0 0 0 0 0 0 0 0 0 0
10、注:在有向图的邻接矩阵中,第i行含义:以结点vi为尾的弧(即出度边);第i列含义:以结点vi为头的弧(即入度边)。顶点表:0 1 1 00 0 0 0 0 0 0 1 1 0 0 0 0 1 1 00 0 0 0 0 0 0 1 1 0 0 0 有向图的邻接矩阵表示法13定义为:A.Edge i j=Wij 或(vi,vj)VR 无边(弧)v1v2v3v4Nv5v65489755邻接矩阵:N.Edge=(v1 v2 v3 v4 v5 v6 )顶点表:5 7 4 8 9 5 6 5 3 1 5 7 4 8 9 5 6 5 3 1 网(即有权图)的邻接矩阵表示法6容易实现图的操作,如:求某顶点的度
11、、判断顶点之间是否有边、找顶点的邻接点等等。n个顶点需要n*n个单元存储边;空间效率为O(n2)。对稀疏图而言尤其浪费空间。邻接矩阵表示法的特点缺点:优点:/用两个数组分别存储顶点表和邻接矩阵#define MaxInt 32767 /表示极大值,即#define MVNum 100 /最大顶点数 typedef char VerTexType;/假设顶点的数据类型为字符型 typedef int ArcType;/假设边的权值类型为整型 typedef struct VerTexType vexsMVNum;/顶点表 ArcType arcsMVNumMVNum;/邻接矩阵 int vexn
12、um,arcnum;/图的当前点数和边数 AMGraph;邻接矩阵的存储表示【算法思想】采用邻接矩阵表示法创建无向网4 5A B C DA B 500A C 200A D 150B C 400C D 600输入总顶点数和总边数。依次输入点的信息存入顶点表中。初始化邻接矩阵,使每个权值初始化为极大值。构造邻接矩阵。Status CreateUDN(AMGraph&G)/采用邻接矩阵表示法,创建无向网G cinG.vexnumG.arcnum;/输入总顶点数,总边数 for(i=0;iG.vexsi;/依次输入点的信息 for(i=0;iG.vexnum;+i)/初始化邻接矩阵,边的权值均置为极大
13、值 for(j=0;jG.vexnum;+j)G.arcsij=MaxInt;for(k=0;kv1v2w;/输入一条边依附的顶点及权值 i=LocateVex(G,v1);j=LocateVex(G,v2);/确定v1和v2在G中的位置 G.arcsij=w;/边的权值置为w G.arcsji=G.arcsij;/置的对称边的权值为w /for return OK;/CreateUDN【算法描述】4 5A B C DA B 500A C 200A D 150B C 400C D 600 int LocateVex(MGraph G,VertexType u)/存在则返回u在顶点表中的下标;否
14、则返回-1 int i;for(i=0;iG.vexnum;+i)if(u=G.vexsi)return i;return-1;4 5A B C DA B 500A C 200A D 150B C 400C D 600【算法描述】v 对每个顶点vi 建立一个单链表,把与vi有关联的边的信息链接起来,每个结点设为3个域;v 每个单链表有一个头结点(设为2个域),存vi信息;adjvex nextarcinfodatafirstarc表结点头结点邻接点域,表示vi一个邻接点的位置链域,指向vi下一个边或弧的结点数据域,与边有关信息(如权值)数据域,存储顶点vi 信息链域,指向单链表的第一个结点v
15、每个单链表的头结点另外用顺序存储结构存储。邻接表(链式)表示法0123413341420注:邻接表不唯一,因各个边结点的链入顺序是任意的v1v2v3v4v5231420无向图的邻接表表示空间效率为O(n+2e)。若是稀疏图(eG.vexnumG.arcnum;/输入总顶点数,总边数 for(i=0;i G.verticesi.data;/输入顶点值 G.verticesi.firstarc=NULL;/初始化表头结点的指针域为NULL /for【算法描述】采用邻接表表示法创建无向网for(k=0;kv1v2;/输入一条边依附的两个顶点 i=LocateVex(G,v1);j=LocateVex
16、(G,v2);p1=new ArcNode;/生成一个新的边结点*p1 p1-adjvex=j;/邻接点序号为j p1-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p1;/将新结点*p1插入顶点vi的边表头部 p2=new ArcNode;/生成另一个对称的新的边结点*p2 p2-adjvex=i;/邻接点序号为i p2-nextarc=G.verticesj.firstarc;G.verticesj.firstarc=p2;/将新结点*p2插入顶点vj的边表头部 /for return OK;/CreateUDG 采用邻接表表示法创建无
17、向网邻接表表示法的特点优点:空间效率高,容易寻找顶点的邻接点;判断两顶点间是否有边或弧,需搜索两结点对应的单链表,没有邻接矩阵方便。缺点:v1v2v3v5v4v44321013341420v5v4v3v2v1231420(v1 v2 v3 v4 v5 )v1v2v3v4v50 1 0 1 01 0 1 0 10 1 0 1 11 0 1 0 10 1 1 1 0邻接矩阵与邻接表表示法的关系1.联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。邻接矩阵的空
18、间复杂度为O(n2),而邻接表的空间复杂度为O(n+e)。邻接矩阵与邻接表表示法的关系2.区别:3.用途:邻接矩阵多用于稠密图;而邻接表多用于稀疏图结点表中的结点的表示:data:结点的数据域,保存结点的数据值。firstin:结点的指针域,给出自该结点出发的的第一条边的边结点的地址。firstout:结点的指针场,给出进入该结点的第一条边的 边结点的地址。十字链表-用于有向图datafirstinfirstout边结点表中的结点的表示:info:边结点的数据域,保存边的权值等。tailvex:本条边的出发结点的地址。headvex:本条边的终止结点的地址。hlink:终止结点相同的边中的下一
19、条边的地址。tlink:出发结点相同的边 中的下一条边的地址。十字链表-用于有向图infotailvexheadvexhlinktlink十字链表十字链表-用于无向图结点表中的结点的表示:data:结点的数据域,保存结点的数据值。firstedge:结点的指针域,给出自该结点出发的的第一条边的边结点的地址。datafirstedge十字链表-用于无向图边结点表中的结点的表示:ivex:本条边依附的一个结点的地址。ilink:依附于该结点(地址由ivex给出)的边中的下一条边的的地址。jvex:本条边依附的另一个结点的地址。jlink:依附于该结点(地址由jvex给出)的边中的下一条边的的地址。
20、info:边结点的数据域,保存边的权值等。mark:边结点的标志域,用于标识该条边是否被访问过。markivexilinkjvexjlinkinfo十字链表目 录 导 航6.16.26.36.46.56.66.7图的定义和基本术语案例引入图的类型定义图的存储结构图的遍历图的应用案例分析与实现Contents图的遍历遍历实质找每个顶点的邻接点的过程图的特点图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。遍历定义从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历,它是图的基本运算。
21、人工智能-搜索问题有3个传教士和3个野人来到河边准备渡河,河岸有一条船,每次最多可坐2个人。问传教士为安全起见,应如何规划摆渡方案,使得在任何时刻,在河两岸以及船上传教士人数不能少于野人人数?在每一次渡河后,都会有几种渡河方案供选择,究竟哪种方案最有利?这就是搜索问题。适用情况:难以获得求解所需的全部信息;更没有现成的算法可供求解使用。人工智能-搜索问题概念:依靠经验,利用已有知识,根据问题的实际情况,不断寻找可利用知识,从而构造一条代价最小的推理路线,使问题得以解决的过程称为搜索对这类问题,一般我们都转换为状态空间的搜索问题。人工智能-搜索问题如传教士和野人问题,可用在河左岸的传教士人数、野
22、人人数和船的情况来表示。即,初始时状态为(3,3,1),结束状态为(0,0,0),而中间状态可表示为(2,2,0)、(3,2,1)等等。这类问题的解,就是一个合法状态的序列,其中序列中第一个状态是问题的初始状态,而最后一个状态则是问题的结束状态。SgS0解路径搜索空间全状态空间人工智能-搜索问题在一个33的方框内放有8个编号的小方块,紧邻空位的小方块可以移入到空位上,通过平移小方块可将某一布局变换为另一布局。请给出从初始状态到目标状态移动小方块的操作序列。2318476512384765例:8数码难题搜索引擎的两种基本抓取策略预处理爬行和抓取排名搜索引擎蜘蛛通过跟踪链接访问网页,获得页面HTM
23、L代码存入数据库。索引程序对抓取来的页面数据进行文字提取、中文分词、索引等处理,以备排名程序调用用户输入关键词后,排名程序调用索引库数据,计算相关性,然后按一定格式生成搜索结果页面。爬行抓取索引排序返回搜索引擎的两种基本抓取策略搜索引擎的两种基本抓取策略-深度优先如封建帝位的继承。不能深入的情况下才考虑其他分支的策略搜索引擎的两种基本抓取策略-广度优先类似长幼有序的规则两种策略结合=先广后深+权重优先先把这个页面所有的链接都抓取一次再根据这些URL的权重来判定URL的权重高,就采用深度优先,URL权重低,就采用宽度优先或者不抓取。图常用的遍历:解决思路:设置辅助数组 visited n,用来标
24、记每个被访 问过的顶点。初始状态为0i 被访问,改 visited i为1,防止被多次访问怎样避免重复访问?深度优先搜索广度优先搜索基本思想:仿树的先序遍历过程。v1v1v2v3v8v7v6v4v5DFS 结果v2v4v8v5v3v6v7起点深度优先搜索(DFS Depth_First Search)深度优先搜索的步骤简单归纳:访问起始点v;若v的第1个邻接点没访问过,深度遍历此邻接点;若当前邻接点已访问过,再找v的第2个邻接点重新遍历。213456213546深度优先搜索练习深度优先搜索的步骤详细归纳:E 在访问图中某一起始顶点 v 后,由 v 出发,访问它的任一邻接顶点 w1;E 再从 w
25、1 出发,访问与 w1邻接但还未被访问过的顶点 w2;E 然后再从 w2 出发,进行类似的访问,E 如此进行下去,直至到达所有的邻接顶点都被访问过的顶点 u 为止。起点深度优先搜索的步骤详细归纳:E接着,退回一步,退到前一次刚访问过的顶点,看是否还有其它没有被访问的邻接顶点。如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;如果没有,就再退回一步进行搜索。重复上述过程,直到连通图中所有顶点都被访问过为止。起点213546讨论1:计算机如何实现DFS?1 2345610 000000 0000030 0000040 0000050 0000060 00000000000123456
展开阅读全文