第三章-数据结构-图.pptVIP

  • 6
  • 0
  • 约6.59千字
  • 约 32页
  • 2018-06-19 发布于福建
  • 举报
3.5 图 3.5.1 图的基本概念 3.5.2 图的存储结构 3.5.3 图的遍历 3.5.4 图的应用 三种数据结构比较 线性表:数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继 树形结构:数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关 图形结构:结点之间的关系可以是任意的.图中任意两个元素之间都可能相关。 (3) 路径、回路 在无向图G中,若存在一个顶点序列Vp ,Vi1,Vi2,…,Vin,Vq, 使得(Vp,Vi1),(Vi1,Vi2),…..,(Vin,Vq)均属于E(G),则称顶点Vp到Vq存在一条路径。 简单路径:序列中顶点不重复出现的路径。 环:又称回路,第一个顶点和最后一个顶点相同的路径。 简单回路:又称简单环,除了第一个预点和最后一个顶点外,其余顶点不重复的回路。 路径长度:路径上经过的边或弧的数目。 邻接矩阵的特点 1)无向图的邻接矩阵一定是对称的,而有向图的邻接矩阵不一定对称。因此用邻接矩阵来表示一个具有n个顶点的有向图时,需要n*n个单元来存储邻接矩阵;对有n个顶点的无向图,则只存入上(下)三角阵,故只需n(n+1)/2个单元。 2)无向图邻接矩阵的第i行(或第i列)非零元索的个数正好是第i个顶点的度。 3)有向图邻接矩阵中第i行非零元素的个数为第i个顶点的出度,第i列非零元素的个数为第i个顶点的入度,第i个顶点的度为第i行与第i列非零元素个数之和。 4)用邻接矩阵表示图,很容易确定图中任意两个顶点是否有边相连。 邻接表:是图的一种链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的弧) 邻接表由两部分构成:表头结点、表结点组成的单链表。 表头结点通常以顺序存储结构(向量)存储,称为邻接向量。 深度优先搜索:深度优先遍历定义是递归的,其特点是尽可能先对纵深方向进行搜索,故这种搜索方法称为深度优先搜索。 深度优先遍历序列:对图进行深度优先遍历时,按访问顶点的先后次序得到的顶点序列称为该图的深度优先遍历序列,或简你为DFS序列。 广度优先搜索:广度优先遍历过程中所应用的搜索方法,其特点是尽可能先对横向进行搜索;故称其为广度优先搜索 广度优先遍历序列:对图进行广度优先遍历时,按访问顶点的先后次序得到的顶点序列称为该图的广度优先遍历序列,或简称为BFS序列。 假设以的邻接矩阵作为图的存储结构,深度优先搜索算法描述如下: BFS1 (ADJLIST, n, v) //ADJLIST[1:n]为图的邻接向量,从顶点v出发搜索,CQ[0:n-1]为循环队列,存放被访问顶点// VISIT ( v ); VISITD [v]-true; //访问起始顶点v// Front-n-1; rear-0; //队列指针初始化// CQ[rear] -v; //起始点入队// While(rear!=front) do //队不空时// front-(front+1) mod n; v-CQ[front]; //访问过的顶点出队// p-ADJLIST[v].firarc //p指向第一个邻接点// while(p!=nil) do if not VISITED[adjvex(p)] //adjvex为表结点的邻接域// then { VISIT(adjvex(p)); VISITED[adjvex(p)]-true; rear-(rear+1) mod n; CQ[rear]-adjvex(p)} p-nextarc(p) //找下一个邻接点// end (while) end(while) return 图11 表示以邻接表作为存储结构采用广度优先搜索时的遍历路径(a)、邻接表(b) 。 顶点访问的顺序为 v2-v1-v5-v3-v4-v6 3.5.4 图的应用(选学) 3 6 1 2 4 5 a 1 2 3 4 5 6 2 3 4 1 5 1 5 1 6 2 3 4 b 图11广度优先遍历过程 * * 3.5.1 图的基本概念 1.定义: 图是由顶点集V和顶点间的关系集合R组成的一种数据结构,可以用二元组定义为:G=(V,R)。 其中V是图中顶点的

文档评论(0)

1亿VIP精品文档

相关文档