收藏 分享(赏)

计算机软件技术基础第5章1.ppt

上传人:wspkg9802 文档编号:6845848 上传时间:2019-04-24 格式:PPT 页数:27 大小:686KB
下载 相关 举报
计算机软件技术基础第5章1.ppt_第1页
第1页 / 共27页
计算机软件技术基础第5章1.ppt_第2页
第2页 / 共27页
计算机软件技术基础第5章1.ppt_第3页
第3页 / 共27页
计算机软件技术基础第5章1.ppt_第4页
第4页 / 共27页
计算机软件技术基础第5章1.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、第5章 图形结构 5.1图的定义和术语 5.1.1图的定义图是一种数据元素之间存在多对多关系的数据结构。图是由顶点集合V 和顶点之间关系集合R 组成,记作: G =(V,R) 其中:V是顶点的非空有限集合,V=(V1, V2, Vn) R是两个顶点之间关系的集合,它是顶点的有 序或无序对,记作或(Vi, Vj),无向图:图G中的每一条边是顶点的无序对(称为边),则图G称为无向图。无向图记作:G=(V,E)。 在无向图中,用一对圆括号括起来的顶点无序对(Vi,Vj)表示一条边。注意:(Vi,Vj)和(Vj,Vi)是同一条的边。,如右图所示有向图,可表示为:V= V1, V2, V3, V4, V

2、5 E=(V1,V2 ),(V1,V3),(V1,V4)(V2,V3),(V3,V5) ,2,1,3,4,无向图 G1,有向图:图G中的每一条边是顶点的有序对(称为弧),则图G称为有向图。有向图记作:G=(V,A) 有向图中,用一对尖括号括起来的顶点偶对表示一条弧 ,Vi称为弧的始点,Vj 称为弧的终点。注意:和是两条不同的弧。,2,1,3,4,有向图 G2,如右图所示有向图,可表示为: V= V1,V2,V3,V4 A= , ,5.1.2有关图的基本术语 1完全图、稠密图、稀疏图 完全图:具有最大边数的图。 对于含有n个顶点的图: 如果是完全无向图,则边的数目为n(n-1)/2 ;如果是完全

3、有向图,则边的数目为n(n-1) 。如果用n表示图中顶点数目,用e表示边或弧的数目,则有: (1)对于无向图,e的取值范围是0到n(n-1)/2,具有n(n-1)/2条边的无向图称为完全图。 (2)对于有向图,e有取值范围是0到n(n-1),具有n(n-1)条弧的有向图称为有向完全图。如果图中有很少条边或弧,则此图称为稀疏图,反之称为稠密图。,2邻接点、关联边对于无向图G=(V,E),如果(V1,V2)E,则称V1和V2互为邻接点(adjacent),即V1和V2相邻接,而边(V1,V2)则是与结点V1和V2相关联的边。在有向图G=(V,A)中,若A ,则称结点V1邻接到结点V2,结点V2邻接

4、于V1,而弧是与结点V1、V2相关联。,3顶点的度、入度、出度顶点的度(degree)是指和该顶点V相关联的边的数目,记为TD(V),或者说:TD(V)是指图中以V为端点的边的数目。在无向图中,由于各顶点间是由边连接起来的,所以顶点的度就是和它相关联的边数。 在有向图中,与顶点Vi 为终点的弧数称为该顶点的入度。记为ID(Vi)。与顶点Vi为始点的弧数称为该顶点的出度。记为OD(Vi)。则顶点的度为:TD(Vi)= ID(Vi) + OD(Vi) 。,4路径、回路 在图G中,从顶点Vp到Vq的一条路径是顶点序列(Vp,Vi1,Vi2Vin,Vq),且边(Vp,Vi1),(Vi1,Vi2)(Vi

5、n,Vq)或弧,都属于V(G)。路径上的边或弧的数目称为路径长度。如果一条路径中,除了第一个顶点和最后一个顶点之外,其余顶点均不相同,这样的路径称为简单路径。第一个顶点和最后一个顶点相同的简单路径,这样的路径称为回路(或环)。 5.子图假设有两个图G=(V,E)和G=(V,E),如果V V,E E,则称G是G的子图。,6.连通和强连通在无向图中,若从Vi到Vj存在一条路径,则称顶点Vi和Vj是连通的。如果V(G)的每一对不同的顶点都连通,称图为连通图。连通分量是指无向图中的最大连通子图。在有向图G中,如果一对顶点Vi Vj 之间存在一条有向路径,则称Vi Vj 连通。如果顶点Vi Vj连通,同

6、时从 Vj Vi也连通,则称Vi Vj是强连通的。如果在有向图G中任意两个顶点都是强连通的,则称有向图G是强连通图,否则为弱连通图。有向图中最大强连通子图称作有向图G的强连通分量。,7生成树连通图中才有生成树的概念。一个连通图的生成树,它含有图中全部顶点,但最多只有足以构成一棵树的n一l条边。 8权和网如果在图中的边或弧上,写有与它们相关的数值,这种与图的边或弧相关的数值称做权重(简称权)。一般来说,权表示从一个顶点到另一个顶点代价,在实际应用中,表示顶点间的的距离或费用。带权图是指图的所有边(弧)都是带权的边(弧), 一般被称作网。,4.6.2 图的存储结构 5.2.1 邻接矩阵表示法邻接矩

7、阵:用来表示图中顶点之间相邻关系的矩阵,对于具有n个顶点的图G,其相邻矩阵是具有下列性质的n阶方阵:,1 当存在(Vi,Vj)或 0 当不存在(Vi,Vj)或,Ai,j=,2,1,3,4,例:右图无向图,其邻接矩阵为:,0 1 1 1 0 1 0 1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 1 0 0,右图有向图,其邻接矩阵为:,2,1,3,4,0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 0,由邻接矩阵计算个顶点的度无向图:顶点Vi的度是邻接矩阵中的第i行(或第i列)非零元素的个数。有向图:顶点Vi的出度是邻接矩阵中的第i行 非零元素的个数。 顶点Vi的入度是邻

8、接矩阵中的第i列非零元素的个数。无向图的邻接矩阵是对称的,只需要存放下 三角部分即可。,网(带权图)的邻接矩阵可定义为:,Wi 当存在(Vi,Vj)或 当不存在(Vi,Vj)或,Ai,j=,例 P62 图1-5-8网及其邻接矩阵,5.2.2 邻接表邻接表是图的链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点Vi的边(对有向图是以顶点Vi为尾或头的弧)。,邻接域(adjvex) 保存与顶点Vi邻接的顶点在图中的位置。 链域(nextarc) 保存依附于顶点Vi的另一条边或弧的结点。 数据域(info) 在网中保存存储与边或弧有关的信息,如权值等。,另外给

9、每个单链表增设一个表头结点,且将表头结点以数组形式存放(邻接向量)。以便随机访问任一顶点的单链表。表头结点的类型为:,vexdata 数据域:存放顶点的有关信息。 firarc链域: 指向其链表中的第一个结点。,2,1,3,4,无向图的邻接表,表头数组(邻接向量) 单链表,有向图邻接表 1.表示出度邻接表 2.表示入度逆邻接表,5.3 图的遍历图的遍历:在给定的图G=(V,E) 中,从任意一个顶点 V0出发,系统地访问图中的所有顶点,且每个顶点只被访问(例如输出顶点的值)一次,这个过程称为图的遍历。为了避免同一顶点被访问多次,设置一个辅助数组VISTED1:n,它的初始值全为 0(表示未被访问

10、), 一旦访问了结点 vi ,则将VISTEDi赋值为1 (表示已被访问) 。图的遍历方法通常有两种:深度优先遍历和广度优先遍历,5.3.1 深度优先遍历(搜索)深度优先搜索(DFS, depth-first search)基本思想:首先访问指定的起始顶点V0,然后选取一个与V0 相邻接的未被访问的顶点 W 访问之,再选取一个与 W 邻接的且未被访问的一个顶点访问之,依次类推。当到达一个所有邻接顶点都被访问过的顶点时,则依次退回到最近被访问的且其邻接顶点有未被访问过的顶点,然后从该顶点出发重复上述过程,直到所有被访问顶点的邻接顶点都已被访问过为止。,DFS(A,n,v) /A1n,1n为邻接矩

11、阵,v为起始顶点 Visit(v); /访问顶点,打印顶点信息Visitedv=true; /设置顶点已被访问标志for(j=1;j=n;j+) /依次查看每个顶点/找一个与V相邻接的且未被访问的顶点j if (Av,j=1) ,5.3.2. 广度优先遍历(搜索)广度优先遍历(BFS,breadth-first search)基本思想:首先访问指定的起始顶点V0,然后依次与V0相邻接的且未被访问的全部顶点W1,W2,Wt , 然后再顺序W1,W2,Wt 的未被访问的相邻顶点,依次类推,直到所有顶点都被访问过为止。算法实现必须借助于队列,若W1在W2之前访问,则访问顶点W1的相邻顶点也应先于访问

12、顶点W2的相邻顶点,因此广度优先遍历中必须借助于队列按访问顺序存放已被访问的顶点。,2,1,3,4,6,5,7,例:广度优先遍历过程为:,8,v1v1 v2 v3 v4v1 v2 v3 v4 v6v1 v2 v3 v4 v6 v5v1 v2 v3 v4 v6 v5 v8v1 v2 v3 v4 v6 v5 v8 v7,BFS (adjlist,n,v)/adjlist1n为图的邻接表,从顶点v出发搜索;queue0n-1为循环队列,存放被访问过的顶点; visit(v); /访问初始顶点,打印顶点信息visitedv=true; /设置顶点已被访问标志queuerear=v; /被访问顶点进队w

13、hile(rear!=front) front=(front+1)%n; /定位下一个要访问的顶点v=queuefront; /取出要访问的顶点p=adjlistv.firarc;/指向要访问的顶点的第一个邻接顶点,while(p!=NULL) /遍历所有的邻接点if(!visitedp-adjvex) /判断顶点是否被访问过 visit(p-adjvex); /访问该顶点visitedp-adjvex=true;/设置顶点已被访问标志 rear=(rear+1)%n; /队列指针后移queuerear= p-adjvex ; /被访问顶点进队p=nextarc(p); /找下一个邻接顶点 return; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 社会民生

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


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

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

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