另一种叫做广度优先搜索法课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《另一种叫做广度优先搜索法课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 另一种 叫做 广度 优先 搜索 课件
- 资源描述:
-
1、8.1 图的基本概念图的基本概念第第8章章 图图8.2 图的存储结构图的存储结构8.3 图的遍历图的遍历8.4 生成树和最小生成树生成树和最小生成树8.5 最短路径最短路径8.6 拓扑排序拓扑排序8.7 AOE网与关键路径网与关键路径本章小结本章小结8.1 图的基本概念图的基本概念8.1.1 图的定义图的定义 图(图(Graph)G由两个集合由两个集合V(vertex)和)和E(Edge)组成,记为组成,记为G=(V,E),其中,其中V是顶点的有限集合,记为是顶点的有限集合,记为V(G),E是连接是连接V中两个不同顶点(顶点对)的边的有限集中两个不同顶点(顶点对)的边的有限集合,记为合,记为E
2、(G)。和和离散数学离散数学中采用的方法相同,通过顶点集和边集中采用的方法相同,通过顶点集和边集来表示一个图的逻辑结构,实际上就是二元组表示。来表示一个图的逻辑结构,实际上就是二元组表示。在图在图G中,如果代表边的顶点对是无序的,则称中,如果代表边的顶点对是无序的,则称G为为无向无向图图,无向图中代表边的无序顶点对通常用圆括号括起来,用,无向图中代表边的无序顶点对通常用圆括号括起来,用以表示一条无向边。以表示一条无向边。如果表示边的顶点对是有序的,则称如果表示边的顶点对是有序的,则称G为为有向图有向图,在有向,在有向图中代表边的顶点对通常用尖括号括起来图中代表边的顶点对通常用尖括号括起来。说明
3、:说明:对于对于n个顶点的图,对每个顶点连续编号,即顶个顶点的图,对每个顶点连续编号,即顶点的编号为点的编号为0n-1。通过编号唯一确定一个顶点。通过编号唯一确定一个顶点。8.1.2 图的基本术语图的基本术语 1.端点和邻接点端点和邻接点 在一个无向图中,若存在一条边在一个无向图中,若存在一条边(i,j),则称顶点,则称顶点i和顶点和顶点j为此边的两个端点,为此边的两个端点,并称它们互为并称它们互为邻接点邻接点。在一个有向图中,若存在一条边在一个有向图中,若存在一条边,则称此边是顶点,则称此边是顶点i的一条出边,同时的一条出边,同时也是顶点也是顶点j的一条入边;称顶点的一条入边;称顶点i和顶点
4、和顶点j分别为此边的起始端点(简称为起点)分别为此边的起始端点(简称为起点)和终止端点(简称终点);称顶点和终止端点(简称终点);称顶点i 和和顶点顶点j 互为互为邻接点邻接点。13024(a)13024(b)2.顶点的度、入度和出度顶点的度、入度和出度 在无向图中,顶点所具有的边的数在无向图中,顶点所具有的边的数目称为该目称为该顶点的度顶点的度。在有向图中,以顶点在有向图中,以顶点i为终点的入边为终点的入边的数目,称为该的数目,称为该顶点的入度顶点的入度。以顶点。以顶点i为为始点的出边的数目,称为该始点的出边的数目,称为该顶点的出度顶点的出度。一个顶点的入度与出度的和为该一个顶点的入度与出度
5、的和为该顶点的顶点的度度。若一个图中有若一个图中有n个顶点和个顶点和e条边,每条边,每个顶点的度为个顶点的度为di(1in),则有:),则有:niide12113024(a)13024(b)例例一个无向连通图中有一个无向连通图中有16条边,所有顶点的度均小于条边,所有顶点的度均小于5,度为度为4的顶点有的顶点有3个,度为个,度为3的顶点有的顶点有4个,度为个,度为2的顶点有的顶点有2个,个,则该图有则该图有 个顶点。个顶点。A.10B.11C.12D.13解:解:设该图有设该图有n个顶点,图中度为个顶点,图中度为i的顶点数为的顶点数为ni(0i4),显),显然然n0=0,n=3+4+2+n1+
6、n0=9+n1,而度之和,而度之和=43+34+22+n1=28+n1,而度之和,而度之和=2e=32,所以有,所以有28+n1=32,得,得n1=4,n=9+n1=13。本题答案为。本题答案为D。3.完全图完全图 若无向图中的每两个顶点之间都存若无向图中的每两个顶点之间都存在着一条边,有向图中的每两个顶点之在着一条边,有向图中的每两个顶点之间都存在着方向相反的两条边,则称此间都存在着方向相反的两条边,则称此图为图为完全图完全图。显然,完全无向图包含有条边,完显然,完全无向图包含有条边,完全有向图包含有全有向图包含有n(n-1)条边。例如,图条边。例如,图(a)所示的图是一个具有所示的图是一个
7、具有4个顶点的完全个顶点的完全无向图,共有无向图,共有6条边。图条边。图(b)所示的图是所示的图是一个具有一个具有4个顶点的完全有向图,共有个顶点的完全有向图,共有12条边。条边。(b)10231023(a)4.稠密图、稀疏图稠密图、稀疏图 当一个图接近完全图时,则称当一个图接近完全图时,则称为稠密图。相反,当一个图含有为稠密图。相反,当一个图含有较少的边数(即当较少的边数(即当en(n-1))时,)时,则称为则称为稀疏图稀疏图。5.子图子图 设 有 两 个 图设 有 两 个 图 G=(V,E)和和G=(V,E),若,若V是是V的子集,的子集,即即V V,且,且E是是E的子集,即的子集,即E
8、E,则称,则称G是是G的的子图子图。例如。例如图图(b)是图是图(a)的子图,而图的子图,而图(c)不是不是图图(a)的子图。的子图。(a)1302413024(b)13024(c)注意:注意:G中中V的子集和的子集和E的子集并的子集并不一定构成不一定构成G的子图。的子图。6.路径和路径长度路径和路径长度 在一个图在一个图G=(V,E)中,从顶点中,从顶点i到顶点到顶点j的一条路径是一个顶点序列的一条路径是一个顶点序列(i,i1,i2,im,j),若此图若此图G是无向图,则边是无向图,则边(i,i1),(i1,i2),(im-1,im),(im,j)属于属于E(G);若此图是有向图,;若此图是
9、有向图,则则,属于属于E(G)。路径长度路径长度是指一条路径上经过的边的数是指一条路径上经过的边的数目。若一条路径上除开始点和结束点可以相目。若一条路径上除开始点和结束点可以相同外,其余顶点均不相同,则称此路径为同外,其余顶点均不相同,则称此路径为简简单路径单路径。例如,有图中,。例如,有图中,(0,2,1)就是一条就是一条简单路径,其长度为简单路径,其长度为2。1023 7.回路或环回路或环 若一条路径上的开始点与结束若一条路径上的开始点与结束点为同一个顶点,则此路径被称为点为同一个顶点,则此路径被称为回路或环。开始点与结束点相同的回路或环。开始点与结束点相同的简单路径被称为简单路径被称为简
10、单回路简单回路或或简单环简单环。例如,右图中,例如,右图中,(0,2,1,0)就就是一条简单回路,其长度为是一条简单回路,其长度为3。1023 8.连通、连通图和连通分量连通、连通图和连通分量 在无向图在无向图G中,若从顶点中,若从顶点i到顶点到顶点j有路径,则称顶点有路径,则称顶点i和和j是是连通连通的。的。若图若图G中任意两个顶点都中任意两个顶点都连通,则称连通,则称G为为连通图连通图,否则,否则称为称为非连通图非连通图。无向图无向图G中的极大连通子中的极大连通子图称为图称为G的连通分量。显然,的连通分量。显然,任何连通图的连通分量只有一任何连通图的连通分量只有一个,即本身,而非连通图有多
11、个,即本身,而非连通图有多个个连通分量连通分量。1023102(b)(a)3 9.强连通图和强连通分量强连通图和强连通分量 在有向图在有向图G中,若从顶点中,若从顶点i到到顶点顶点j有路径,则称从顶点有路径,则称从顶点i到到j是是连通连通的。的。若图若图G中的任意两个顶点中的任意两个顶点i和和j都连通,即从顶点都连通,即从顶点i到到j和从顶点和从顶点j到到i都存在路径,则称图都存在路径,则称图G是是强连强连通图通图。有向图有向图G中的极大强连通子图中的极大强连通子图称为称为G的的强连通分量强连通分量。显然,强。显然,强连通图只有一个强连通分量,即连通图只有一个强连通分量,即本身,非强连通图有多
12、个强连通本身,非强连通图有多个强连通分量。分量。1023(b)(a)102310.权和网权和网 图中每一条边都可以附有一个对应的数值,这种与图中每一条边都可以附有一个对应的数值,这种与边相关的数值称为边相关的数值称为权权。权可以表示从一个顶点到另一个。权可以表示从一个顶点到另一个顶点的距离或花费的代价。边上带有权的图称为顶点的距离或花费的代价。边上带有权的图称为带权图,带权图,也称作也称作网网。例例8.1 有有n个顶点的有向强连通图最多需要多少条边?个顶点的有向强连通图最多需要多少条边?最少需要多最少需要多 少条边?少条边?解:解:有有n个顶点的有向强连通图最多有个顶点的有向强连通图最多有n(
13、n-1)条边条边(构成一个有向完全图的情况);最少有(构成一个有向完全图的情况);最少有n条边(条边(n个个顶点依次首尾相接构成一个环的情况)。顶点依次首尾相接构成一个环的情况)。012n-2n-18.2 图的存储结构图的存储结构 8.2.1 邻接矩阵存储方法邻接矩阵存储方法 邻接矩阵是表示顶点之间相邻关系的矩阵。设邻接矩阵是表示顶点之间相邻关系的矩阵。设G=(V,E)是具有是具有n(n0)个顶点的图,)个顶点的图,顶点的顺序依次为顶点的顺序依次为0n-1,则则G的邻接矩阵的邻接矩阵A是是n阶方阵,其定义如下:阶方阵,其定义如下:(1)如果)如果G是无向图,则:是无向图,则:Aij=1:若:若
14、(i,j)E(G)0:其他其他 (2)如果)如果G是有向图,则:是有向图,则:Aij=1:若:若E(G)0:其他其他(3)如果)如果G是带权无向图,则:是带权无向图,则:Aij=wij:若:若ij且且(i,j)E(G)0:i=j :其他:其他(4)如果)如果G是带权有向图,则:是带权有向图,则:Aij=wij:若:若ij且且E(G)0:i=j:其他:其他注意:注意:带权图和不带权图表示的元素类型不同。带权图带权图和不带权图表示的元素类型不同。带权图(不论有向还是无向图)(不论有向还是无向图)Aij用用double表示,不带权图表示,不带权图(不论有向还是无向图)(不论有向还是无向图)Aij用用
15、int表示。表示。011011011111010011011101001001000001100001100010101320413204A10 1 2 3 401234A20 1 2 3 401234对称对称不对称不对称思考题:思考题:(1)对于有)对于有n个顶点个顶点e条边的无向图,邻接矩阵表示时条边的无向图,邻接矩阵表示时有多少个元素,多少个非有多少个元素,多少个非0元素?元素?(2)对于有)对于有n个顶点个顶点e条边的有向图,邻接矩阵表示时条边的有向图,邻接矩阵表示时有多少个元素,多少个非有多少个元素,多少个非0元素?元素?邻接矩阵的特点如下:邻接矩阵的特点如下:(1)图的邻接矩阵表示
16、是唯一的。)图的邻接矩阵表示是唯一的。(2)无向图的邻接矩阵一定是一个对称矩阵。因此,)无向图的邻接矩阵一定是一个对称矩阵。因此,按照压缩存储的思想,在具体存放邻接矩阵时只需存放上按照压缩存储的思想,在具体存放邻接矩阵时只需存放上(或下)三角形阵的元素即可。(或下)三角形阵的元素即可。(3)不带权的有向图的邻接矩阵一般来说是一个稀疏)不带权的有向图的邻接矩阵一般来说是一个稀疏矩阵,因此,当图的顶点较多时,可以采用三元组表的方矩阵,因此,当图的顶点较多时,可以采用三元组表的方法存储邻接矩阵。法存储邻接矩阵。(4)对于无向图,邻接矩阵的第)对于无向图,邻接矩阵的第i行(或第行(或第i列)非零元列)
17、非零元素(或非素(或非元素)的个数正好是第元素)的个数正好是第i个顶点的度。个顶点的度。(5)对于有向图,邻接矩阵的第)对于有向图,邻接矩阵的第i行(或第行(或第i列)非零元列)非零元素(或非素(或非元素)的个数正好是第元素)的个数正好是第i个顶点的出度(或入度)。个顶点的出度(或入度)。(6)用邻接矩阵方法存储图,很容易确定图中任意两个)用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连。但是,要确定图中有多少条边,则顶点之间是否有边相连。但是,要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很必须按行、按列对每个元素进行检测,所花费的时间代价很大。这
18、是用邻接矩阵存储图的局限性。大。这是用邻接矩阵存储图的局限性。邻接矩阵的数据类型定义如下:邻接矩阵的数据类型定义如下:#define MAXV typedef struct int no;/顶点编号顶点编号 InfoType info;/顶点其他信息顶点其他信息 VertexType;/顶点类型顶点类型typedef struct /图的定义图的定义 int edgesMAXVMAXV;/邻接矩阵邻接矩阵 int n,e;/顶点数,弧数顶点数,弧数 VertexType vexsMAXV;/存放顶点信息存放顶点信息 MGraph;/图的邻接矩阵表示类型图的邻接矩阵表示类型8.2.2 邻接表存储
19、方法邻接表存储方法 图的邻接表存储方法是一种顺序分配与链式分配相结合图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法。在邻接表中,对图中每个顶点建立一个单链表,的存储方法。在邻接表中,对图中每个顶点建立一个单链表,第第i个单链表中的节点表示依附于顶点个单链表中的节点表示依附于顶点i的边(对有向图是以顶的边(对有向图是以顶点点i为尾的边)。每个单链表上附设一个表头节点。为尾的边)。每个单链表上附设一个表头节点。边表节点边表节点 表头节点表头节点adjvexnextarcinfodatafirstarctypedef struct ANode int adjvex;/该边的终点编号该边的
20、终点编号 struct ANode*nextarc;/指向下一条边的指针指向下一条边的指针 InfoType info;/该边的相关信息该边的相关信息 ArcNode;/边表节点类型边表节点类型typedef struct Vnode Vertex data;/顶点信息顶点信息 ArcNode*firstarc;/指向第一条边指向第一条边 VNode;/邻接表头节点类型邻接表头节点类型typedef VNode AdjListMAXV;/AdjList是邻接表类型是邻接表类型typedef struct AdjList adjlist;/邻接表邻接表 int n,e;/图中顶点数图中顶点数n和
21、边数和边数e ALGraph;/完整的图邻接表类型完整的图邻接表类型 其中,表节点由三个域组成,其中,表节点由三个域组成,adjvex指示与顶点指示与顶点i邻邻接的点在图中的位置,接的点在图中的位置,nextarc指示下一条边或弧的节点,指示下一条边或弧的节点,info存储与边或弧相关的信息,如权值等。存储与边或弧相关的信息,如权值等。表头节点由两个域组成,表头节点由两个域组成,data存储顶点存储顶点i的名称或其的名称或其他信息,他信息,firstarc指向链表中第一个节点。指向链表中第一个节点。1320413204data firstarcadjvex next表头节点表头节点边表节点边表
22、节点思考题:思考题:(1)对于有)对于有n个顶点个顶点e条边的无向图,邻接表表示时有条边的无向图,邻接表表示时有多少个表头节点,多少个表节点?多少个表头节点,多少个表节点?(2)对于有)对于有n个顶点个顶点e条边的有向图,邻接表表示时有条边的有向图,邻接表表示时有多少个表头节点,多少个表节点?多少个表头节点,多少个表节点?邻接表的特点如下:邻接表的特点如下:(1)邻接表表示不唯一。这是因为在每个顶点对应的单链)邻接表表示不唯一。这是因为在每个顶点对应的单链表中,各边节点的链接次序可以是任意的,取决于建立邻接表表中,各边节点的链接次序可以是任意的,取决于建立邻接表的算法以及边的输入次序。的算法以
23、及边的输入次序。(2)对于有)对于有n个顶点和个顶点和e条边的无向图,其邻接表有条边的无向图,其邻接表有n个顶个顶点节点和点节点和2e个边节点。显然,在总的边数小于个边节点。显然,在总的边数小于n(n-1)/2的情况下,的情况下,邻接表比邻接矩阵要节省空间。邻接表比邻接矩阵要节省空间。(3)对于无向图,邻接表的顶点)对于无向图,邻接表的顶点i对应的第对应的第i个链表的边节个链表的边节点数目正好是顶点点数目正好是顶点i的度。的度。(4)对于有向图,邻接表的顶点)对于有向图,邻接表的顶点i对应的第对应的第i个链表的边节个链表的边节点数目仅仅是顶点点数目仅仅是顶点i的出度。其入度为邻接表中所有的出度
24、。其入度为邻接表中所有adjvex域值域值为为i的边节点数目。的边节点数目。例例8.2 给定一个具有给定一个具有n个节点的无向图的邻接矩阵和邻接表。个节点的无向图的邻接矩阵和邻接表。(1)设计一个将邻接矩阵转换为邻接表的算法;)设计一个将邻接矩阵转换为邻接表的算法;(2)设计一个将邻接表转换为邻接矩阵的算法;)设计一个将邻接表转换为邻接矩阵的算法;(3)分析上述两个算法的时间复杂度。)分析上述两个算法的时间复杂度。解:解:(1)在邻接矩阵上查找值不为)在邻接矩阵上查找值不为0的元素,找到这样的的元素,找到这样的元素后创建一个表节点并在邻接表对应的单链表中采用前插法元素后创建一个表节点并在邻接表
25、对应的单链表中采用前插法插入该节点。算法如下:插入该节点。算法如下:void MatToList(MGraph g,ALGraph*&G)/将邻接矩阵将邻接矩阵g转换成邻接表转换成邻接表G int i,j,n=g.eexnum;ArcNode*p;/n为顶点数为顶点数 G=(ALGraph*)malloc(sizeof(ALGraph);for(i=0;iadjlisti.firstarc=NULL;for(i=0;i=0;j-)if(g.edgesij!=0)p=(ArcNode*)malloc(sizeof(ArcNode);/创建节点创建节点*p p-adjvex=j;p-nextarc
展开阅读全文