图的基本操作实验报告.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图的基本操作实验报告

《数据结构》实验报告书实验内容:图的基本操作 学院班级:计算机学院计算机科学与技术 姓 名:***学 号:2011008******指导老师:高老师前言计算机编程中加工处理的对象是数据,而数据具有一定的组织结构,所以学习计算机编程仅仅了解计算机语言是不够的,还必须掌握数据的组织、存储和运算的一般方法,这便是数据结构课程中所研究的内容,也是我们编写计算机程序的重要基础,由于它对计算机学科起到承前启后的作用,因此本课程被列为计算机等相关专业最重要的专业基础课;同时数据结构是计算机专业教学的一门核心课程。计算机各领域都要用到各种数据结构,而且要从事计算机科学与技术工作,尤其是计算机领域的软件开发工作,必须具备较强的数据结构基础。数据结构课程内容丰富、学习量大,实践性强;隐含在各部分内容中的方法和技术多;算法设计具有动态性和抽象性等特点,看懂听明白与掌握会应用之间有相当大的一段距离。所以学生必须多实践才能进一步加深对课程的理解,理解和掌握算法设计所需的方法和技术,为整个专业学习打下良好的基础。图的基本操作实验目的1、使学生可以巩固所学的有关图的基本知识。2、熟练掌握图的存储结构。3、熟练掌握图的两种遍历算法。实验内容[问题描述]  对给定图,实现图的深度优先遍历和广度优先遍历。[基本要求]   以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。【测试数据】  由学生依据软件工程的测试技术自己确定。实验前的准备工作1、掌握图的相关概念。2、掌握图的逻辑结构和存储结构。3、掌握图的两种遍历算法的实现。算法设计图的深度优先:类似树的先根遍历,初始状态所有顶点未曾被访问,则深度优先从图中某个顶点v出发,访问此顶点,然后依次从v的未被访问的邻接点出发深度优先遍历图,直到图中所有和v有路径相通的顶点都被访问到,若此图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点重复上述过程直到所有的顶点都被访问。广度优先优先:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使先被访问的顶点的邻接点选于后被访问的顶点的邻接眯被访问,直到图中所有已被访问的顶点的邻接点都被访问,若此图中尚有顶点未被访问,则另选图中一相未曾被访问的顶点作起始点重复上述过程。因此定义一个数组存放顶点的值、定义个visited[] 来标志是否被访问。首先建立图,依次输入图的顶点数,图的顶点值,图的弧的条数,各每条弧所连接的两个顶点然后自动调用dfs()和bfs()两个函数把遍历的值输出来。深度优先算法:dfs():寻找v的还没有访问过的邻接点,循环找到v的所有的邻接点,每找到一个都以该邻接点为新的起点递归调用深度优先算法,找下一个邻接点。voiddfs(vexsb,adjmata,intv,int visited[],int n) {int w; coutb[v] ; visited[v]=1; w=0; while(wn a[v][w]==0) w++; while(wn){ if(visited[w]==0 a[v][w]!=0) dfs(b,a,w,visited,n); w++; } }广度优先算法:bfs():设置一个队列,并设置一个变量w存放下一个邻接点的变量序号和队尾队首的指针。voidbfs(vexsb,adjmata,intv,int visited[],int n) {int queue[Max];intw,rear,first;rear=first=0; coutb[v] ; visited[v]=1; rear++; queue[rear]=v; while(first!=rear){ first++; v=queue[first]; w=0; while(wn){ if(a[v][w]==1 visited[w]==0){ coutb[w] ; visited[w]=1; rear++; queue[rear]=w; } w++; } } }查找v在图中位置函数:locatevex():输入每第弧所连接的两条边时要定们v在图中的位置。intlocatevex(vexsb,charv,int n){intk,i; k=-1; for (i=0;in;++i) if (b[i]==v) k=i; return k; }主函数:main():定义了一些变量,输入输出等操作,以及深度优先,广度优先遍历时for循环判断等。void main(){ int n,m,i,j,k1,k2; vexs b;adjmat a; char v1,v2; int visited

文档评论(0)

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

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

1亿VIP精品文档

相关文档