Chapter 6 图的遍历
- 格式:ppt
- 大小:857.00 KB
- 文档页数:29
HUNAN UNIVERSITY数据结构实验报告题目:图的遍历问题学生姓名梁天学生学号************专业班级计科1403指导老师夏艳日期2016.05.14背景网络蜘蛛即Web Spider,是一个很形象的名字。
把互联网比喻成一个蜘蛛网,那么Spider 就是在网上爬来爬去的蜘蛛。
网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。
如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
这样看来,网络蜘蛛就是一个爬行程序,一个抓取网页的程序。
在抓取网页的时候,网络蜘蛛一般有两种策略:广度优先和深度优先(如下面这张简单化的网页连接模型图所示,其中A为起点也就是蜘蛛索引的起点)。
深度优先顾名思义就是让网络蜘蛛尽量的在抓取网页时往网页更深层次的挖掘进去讲究的是深度!也泛指: 网络蜘蛛将会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接! 则访问的节点顺序为==> A --> B --> E --> H --> I --> C --> D --> F --> K --> L --> G。
深度爬行的优点是:网络蜘蛛程序在设计的时候相对比较容易些;缺点是每次爬行一层总要向"蜘蛛老家" 数据库访问一下。
问问老总有必要还要爬下一层吗! 爬一层问一次.... 如果一个蜘蛛不管3721不断往下爬很可能迷路更有可能爬到国外的网站去,不仅增加了系统数据的复杂度更是增加的服务器的负担。
广度优先在这里的定义就是层爬行,即一层一层的爬行,按照层的分布与布局去索引处理与抓取网页。
则访问的节点顺序为==> A --> B --> C --> D --> E --> F --> G --> H --> I--> K --> L。
习题六参考答案一、选择题1.在一个有个顶点的有向图中,若所有顶点的出度之和为,则所有顶点的入度之和为(A)。
A. B. C. D.2.一个有向图有个顶点,则每个顶点的度可能的最大值是(B)。
A. B. C. D.3.具有6个顶点的无向图至少应有(A)条边才能确保是一个连通图。
A.5B.6C.7D.84.一个有n个顶点的无向图最多有(C)条边。
A. B. C. D.5.对某个无向图的邻接矩阵来说,下列叙述正确的是(A)。
A.第行上的非零元素个数和第列上的非零元素个数一定相等B.矩阵中的非零元素个数等于图中的边数C.第行与第列上的非零元素的总数等于顶点的度数D.矩阵中非全零行的行数等于图中的顶点数6.已知一个有向图的邻接矩阵,要删除所有以第个顶点为孤尾的边,应该(B)。
A.将邻接矩阵的第行删除B.将邻接矩阵的第行元素全部置为0C.将邻接矩阵的第列删除D.将邻接矩阵的第列元素全部置为07.下面关于图的存储的叙述中,哪一个是正确的?……(A)A.用邻接矩阵存储图,占用的存储空间只与图中顶点数有关,而与边数无关B.用邻接矩阵存储图,占用的存储空间只与图中边数有关,而与顶点数无关C.用邻接表存储图,占用的存储空间只与图中顶点数有关,而与边数无关D.用邻接表存储图,占用的存储空间只与图中边数有关,而与顶点数无关8.对图的深度优先遍历,类似于对树的哪种遍历?……(A)A.先根遍历B.中根遍历C.后根遍历D.层次遍历9.任何一个无向连通图的最小生成树(B)。
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在10.下面是三个关于有向图运算的叙述:(1)求两个指向结点间的最短路径,其结果必定是唯一的(2)求有向图结点的拓扑序列,其结果必定是唯一的(3)求AOE网的关键路径,其结果必定是唯一的其中哪个(些)是正确的?……(D )A.只有(1)B.(1)和(2)C.都正确D.都不正确二、填空题1.若用表示图中顶点数,则有条边的无向图称为完全图。
实验六图及其应用数据结构实验六图及其应用1、实验目的? 熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法 ? 掌握图的基本运算及应用? 加深对图的理解,逐步培养解决实际问题的编程能力2、实验内容:采用邻接表或邻接矩阵方式存储图,实现图的深度遍历和广度遍历;用广度优先搜索方法找出从一顶点到另一顶点边数最少的路径。
1.问题描述:利用邻接表存储结构,设计一种图(有向或无向),并能够对其进行如下操作:1) 创建一个可以随机确定结点数和弧(有向或无向)数的图; 2) 根据图结点的序号,得到该结点的值;3) 根据图结点的位置的第一个邻接顶点的序号,以及下一个邻接顶点的序号;4) 实现从第v 个顶点出发对图进行深度优先递归遍历; 5) 实现对图作深度优先遍历;6) 实现对图进行广度优先非递归遍历; 编写主程序,实现对各不同的算法调用。
2.实现要求:(以邻接表存储形式为例)编写图的基本操作函数::对图的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。
1)“建立图的邻接表算法”:CreateGraph(ALGraph *G) 操作结果:采用邻接表存储结构,构造没有相关信息的图G2)“邻接表表示的图的递归深度优先遍历算法”:DFSTraverse(ALGraphG,void(*Visit)(char*)) 初始条件:图G 已经存在;操作结果:返回图的按深度遍历的结果。
3)“邻接表表示的图的广度优先遍历算法”: BFSTraverse(ALGraphG,void(*Visit)(char*)) 初始条件:图G 已经存在;操作结果:返回图的按广度遍历的结果。
4)“邻接表从某个结点开始的广度优先遍历算法”:BFS(ALGraph G, int v)初始条件:图G 已经存在;操作结果:返回图从某个结点开始的按广度遍历的结果。
分析: 修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。
图1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。
【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。
⑵任何连通图的连通分量只有一个,即是()。
【解答】其自身⑶图的存储结构主要有两种,分别是()和()。
【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。
⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。
【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。
⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。
【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。
【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。
【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。
【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。
⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。
【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。
【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。
第六章图习题解析1一、选择题1、设无向图的顶点个数为n,则该无向图最多有 B 条边。
A、n-1B、n(n-1)/2C、n(n+1)/2D、0E、n22、在下列两种求图的最小生成树的算法中,B 算法适合于求边稀疏的网的最小生成树。
A、PrimB、Kruskal3、下面的叙述中不正确的是 B 。
A、关键活动不按期完成就会影响整个工程的完成时间B、任何一个关键活动提前完成,将使整个工程提前完成C、所有关键活动都提前完成,则整个工程将提前完成D、某些关键活动若提前完成,将使整个工程提前完成4、采用邻接表存储的图,其深度优先遍历类似于二叉树的 B 。
A、中序遍历B、先序遍历C、后序遍历D、按层次遍历5、采用邻接表存储的图,其广度优先遍历类似于二叉树的 A 。
A、按层次遍历B、中序遍历C、后序遍历D、先序遍历6、具有n个顶点的有向图最多有 B 条边。
A、nB、n(n-1)C、n(n+1)D、n27、一个n个顶点的连通无向图,其边的个数至少为 A 。
A、n-1B、nC、n+1D、nlog2n8、下列说法中,正确的有 C 。
A、最小生成树也是哈夫曼树B、最小生成树唯一C、普里姆最小生成树算法时间复杂度为O(n2)D、克鲁斯卡尔最小生成树算法普里姆算法更适合与边稠密的网。
10、判定一个有向图是否存在回路,除了可以利用拓扑排序的方法外,还可以利用 C 。
A、求关键路径的方法B、求最短路径的Dijkstra方法C、深度优先遍历算法D、广度优先遍历算法11、在一个具有n个顶点的有向图中,若所有顶点的出度之和为s,则所有顶点的入度之和为 A 。
A、sB、s-1C、s+1D、n12、在一个无向图中,若两个顶点之间的路径长度为k,则该路径上的顶点数为 B 。
A、kB、k+1C、k+2D、2k13、一个有n个顶点的无向连通图,它所包含的连通分量个数为 B 。
A、0B、1C、nD、n+114、对于一个有向图,若一个顶点的入度为k1、出度k2,则对应邻接表中该顶点单链表中的结点数为 B 。
数据结构课程设计题目图的建立及输出学生姓名学号院系专业指导教师二O一O年12 月16 日目录一、设计题目 (2)二、运行环境(软、硬件环境) (2)三、算法设计的思想 (2)3.1邻接矩阵表示法 (2)3.2图的遍历 (4)3.3邻接矩阵的输出 (5)四、算法的流程图 (6)五、算法设计分析 (7)5.1无向网邻接矩阵的建立算法 (7)5.2无向图邻接矩阵的建立算法 (7)5.3图的深度优先遍历 (7)5.4图的广度优先遍历 (8)六、源代码 (8)七、运行结果分析 (14)八、收获及体会 (15)一、设计题目:图的建立及输出*问题描述:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两种类型),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。
二、运行环境(软、硬件环境)*软件环境:Windows7、 Windows Vista、 Windows Xp等*硬件环境:处理器:Pentium4以上内存容量: 256M以上硬盘容量:40GB 以上三、算法设计的思想1、邻接矩阵表示法:设G=(V,E)是一个图,其中V={V1,V2,V3…,Vn}。
G的邻接矩阵是一个他有下述性质的n阶方阵:1,若(Vi,Vj)∈E 或<Vi,Vj>∈E;A[i,j]={0,反之图5-2中有向图G1和无向图G2的邻接矩阵分别为M1和M2:M1=┌0 1 0 1 ┐│ 1 0 1 0 ││ 1 0 0 1 │└0 0 0 0 ┘M2=┌0 1 1 1 ┐│ 1 0 1 0 ││ 1 1 0 1 │└ 1 0 1 0 ┘注意无向图的邻接是一个对称矩阵,例如M2。
用邻接矩阵表示法来表示一个具有n个顶点的图时,除了用邻接矩阵中的n*n个元素存储顶点间相邻关系外,往往还需要另设一个向量存储n个顶点的信息。
因此其类型定义如下:VertexType vertex[MAX_VERTEX_NUM]; // 顶点向量AdjMatrix arcs; // 邻接矩阵int vexnum, arcnum; // 图的当前顶点数和弧(边)数GraphKind kind; // 图的种类标志若图中每个顶点只含一个编号i(1≤i≤vnum),则只需一个二维数组表示图的邻接矩阵。
习题六参考答案一、选择题1.在一个有个顶点的有向图中,若所有顶点的出度之和为,则所有顶点的入度之和为(A)。
A. B. C. D.2.一个有向图有个顶点,则每个顶点的度可能的最大值是(B)。
A. B. C. D.3.具有6个顶点的无向图至少应有(A)条边才能确保是一个连通图。
A.5B.6C.7D.84.一个有n个顶点的无向图最多有(C)条边。
A. B. C. D.5.对某个无向图的邻接矩阵来说,下列叙述正确的是(A)。
A.第行上的非零元素个数和第列上的非零元素个数一定相等B.矩阵中的非零元素个数等于图中的边数C.第行与第列上的非零元素的总数等于顶点的度数D.矩阵中非全零行的行数等于图中的顶点数6.已知一个有向图的邻接矩阵,要删除所有以第个顶点为孤尾的边,应该(B)。
A.将邻接矩阵的第行删除B.将邻接矩阵的第行元素全部置为0C.将邻接矩阵的第列删除D.将邻接矩阵的第列元素全部置为07.下面关于图的存储的叙述中,哪一个是正确的?……(A)A.用邻接矩阵存储图,占用的存储空间只与图中顶点数有关,而与边数无关B.用邻接矩阵存储图,占用的存储空间只与图中边数有关,而与顶点数无关C.用邻接表存储图,占用的存储空间只与图中顶点数有关,而与边数无关D.用邻接表存储图,占用的存储空间只与图中边数有关,而与顶点数无关8.对图的深度优先遍历,类似于对树的哪种遍历?……(A)A.先根遍历B.中根遍历C.后根遍历D.层次遍历9.任何一个无向连通图的最小生成树(B)。
A.只有一棵B.有一棵或多棵C.一定有多棵D.可能不存在10.下面是三个关于有向图运算的叙述:(1)求两个指向结点间的最短路径,其结果必定是唯一的(2)求有向图结点的拓扑序列,其结果必定是唯一的(3)求AOE网的关键路径,其结果必定是唯一的其中哪个(些)是正确的?……(D)A.只有(1)B.(1)和(2)C.都正确D.都不正确二、填空题1.若用表示图中顶点数,则有条边的无向图称为完全图。
常用的遍历方式
遍历是指对某一个数据结构中的每一个元素都进行一次访问的
过程。
在编程中,遍历是一种非常常见的操作,常用于查找、排序、统计等需要遍历数据结构中所有元素的场景。
常用的遍历方式包括: 1.线性遍历:线性遍历是指按照数据结构中元素的顺序依次访问每一个元素的方式。
常见的线性遍历方式有顺序遍历和倒序遍历。
顺序遍历是从数据结构的头部开始访问元素,依次向后遍历,而倒序遍历则是从数据结构的尾部开始访问元素,依次向前遍历。
2.层次遍历:层次遍历是指按照数据结构中元素的层次结构依次访问每一个元素的方式。
常见的层次遍历方式有广度优先遍历和深度优先遍历。
广度优先遍历是从数据结构的根节点开始,依次访问每一层节点的方式,而深度优先遍历则是从数据结构的根节点开始,依次访问每一个子树的方式。
3.递归遍历:递归遍历是指通过递归调用实现遍历数据结构的方式。
常见的递归遍历方式有前序遍历、中序遍历和后序遍历。
前序遍历是先访问根节点,再访问左子树和右子树;中序遍历是先访问左子树,再访问根节点和右子树;后序遍历是先访问左子树和右子树,再访问根节点。
以上是常用的遍历方式,不同的遍历方式适用于不同的数据结构和操作场景,选择合适的遍历方式可以大大提高编程效率。
- 1 -。