网站大量收购独家精品文档,联系QQ:2885784924

实验六 图及其应用.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验六图及其应用 1、实验目的 熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法 掌握图的基本运算及应用 加深对图的理解,逐步培养解决实际问题的编程能力 2、实验内容: 采用邻接表或邻接矩阵方式存储图,实现图的深度遍历和广度遍历; 用广度优先搜索方法找出从一顶点到另一顶点边数最少的路径。 1.问题描述:利用邻接表存储结构,设计一种图(有向或无向),并能够对其进行如下操作: 创建一个可以随机确定结点数和弧(有向或无向)数的图; 根据图结点的序号,得到该结点的值; 根据图结点的位置的第一个邻接顶点的序号,以及下一个邻接顶点的序号; 实现从第v 个顶点出发对图进行深度优先递归遍历; 实现对图作深度优先遍历; 实现对图进行广度优先非递归遍历; 编写主程序,实现对各不同的算法调用。 2.实现要求:(以邻接表存储形式为例)编写图的基本操作函数:: 对图的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。 1)“建立图的邻接表算法”:CreateGraph(ALGraph *G) 操作结果:采用邻接表存储结构,构造没有相关信息的图G 2)“邻接表表示的图的递归深度优先遍历算法”:DFSTraverse(ALGraph G,void(*Visit)(char*)) 初始条件:图G 已经存在; 操作结果:返回图的按深度遍历的结果。 3)“邻接表表示的图的广度优先遍历算法”: BFSTraverse(ALGraph G,void(*Visit)(char*)) 初始条件:图G 已经存在; 操作结果:返回图的按广度遍历的结果。 4)“邻接表从某个结点开始的广度优先遍历算法”:BFS(ALGraph G, int v) 初始条件:图G 已经存在; 操作结果:返回图从某个结点开始的按广度遍历的结果。 分析: 修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 3、实验指导 本实验以图的邻接表存储结构为例,要求完成基本要求,同时对无向图,有向网,无向网也一并实现其相关的操作,课后同学们可以用邻接矩阵式存储结构完成以上操作。 1. 首先将图的链接存储结构定义放在一个头文件:如取名为ALGraphDef.h。 2. 链接表式存储图的基本操作也放在一个文件中ALGraphAlgo.h. 3.将函数的测试和主函数组合成一个文件,如取名为文件ALGraphUse.cpp. 由于要用到队列技术,对于队列的数据结构定义和基本操作函数的描述就可以借助实验二的结果,不必重写。 4、基本实验的参考程序 1.文件pubuse.h 头文件; 2.文件LinkQueueDef.h 是实验3 中的链式队列的存储结构; 3.文件LinkQueueAlgo.cpp 是实验3 中的链式队列的基本操作; 4.文件ALGraphDef.h 定义了图的链接存储结构(以邻接表存储表示) #define MAX_VERTEX_NUM 20 typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */ typedef struct ArcNode { int adjvex; /* 该弧所指向的顶点的位置*/ struct ArcNode *nextarc; /* 指向下一条弧的指针*/ InfoType *info; /* 网的权值指针) */ }ArcNode; /* 表结点*/ typedef struct { VertexType data; /* 顶点信息*/ ArcNode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针*/ }VNode,AdjList[MAX_VERTEX_NUM]; /* 头结点*/ typedef struct { AdjList vertices; int vexnum,arcnum; /* 图的当前顶点数和弧数*/ int kind; /* 图的种类标志*/ }ALGraph; 5.文件ALGraphAlgo.h 定义了链接表式存储图的基本操作 /*ALGraphAlgo.cpp 图的邻接表存储(存储结构由ALGraphDef.h 定义)的基本操作*/ int LocateVex(ALGraph G,VertexType u) { /* 初始条件: 图G 存在,u 和G 中顶点有相同特征*/ /* 操作结果: 若G 中存在顶点u,则返回该顶点在图中位置;否则返回-1 */ int i; for(i=0;iG.vexnum;++i) if(strcmp(u,G.ver

您可能关注的文档

文档评论(0)

skewguj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档