ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:285.12KB ,
资源ID:12629578      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12629578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构与算法专题实验报告2.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构与算法专题实验报告2.docx

1、数据结构与算法专题实验报告2数据结构论文 最短路径1 题目: 创建一个具有n(n1)个顶点的无向图的邻接矩阵,并对其按照“深度优先搜索”和“广度优先搜索”方法进行遍历。2 目标: 1.编写C程序予以实现。2.程序要求能输入图的顶点数、边数以及边的关系,并自动生成邻接矩阵。3.结果输出邻接矩阵和遍历的路径。4.熟悉无向图的两种遍历算法。3 设计思想: 考虑用一个n维数组来存放无向图,若两个结点之间有边,则n维数组对应下标的那个元素值为1,否则为0;在输入图的顶点数和边数时我充分考虑了边界条件,顶点数G.vexnum在0,MAXV范围内,边数在0,G.vexnum*(G.vexnum-1)/2范围

2、内,在这个范围内,程序继续向下执行,否则返回重新输入;输出邻接矩阵的实质是输出 n维数组,我用两重循环来实现;深度优先遍历我采用迪杰特斯拉算法,不过要在此算法中间加一个判断,所有的结点是否都已经遍历过,如果是就退出,如果不是,则按顺序从序号小的开始向大的寻找,找到一个没有遍历过的结点继续调用深度优先遍历算法;广度优先遍历我采用了非递归算法,其实质和深度优先遍历算法相同;在主函数中直接调用CreatGraph(G), DispMatrix(G) ,DepthDisp(G,v) ,WidthDisp(G)函数即可。4 算法描述: step1:设置无向图最多的顶点数/ 这个设置为了更好的输出邻接矩阵

3、;step2: 定义无向图的数据结构;step3:实现生成无向图函数CreatGraph(G)a. 输入顶点数n,判断它是否在允许的范围内,不在则返回重新输入;b. 输入无向图的边数G.arcnum,判断它是否在允许的范围内,不在则返回重新输入 ;c. 输入边,for语句(k=1 to G.arcnum) 输入两顶点v,w,判断v!=w & 0v=Gverxnum & 0w=Gverxnum ,如果是在n维数组中第v行第w列和第w行第v列元素都为1,否则返回重新输入;step4:实现输出邻接矩阵函数 DispMatrix(Graph &G) , 双重for循环实现输出无向图的邻接矩阵;step

4、5:实现深度优先遍历的递归算法函数DepthDisp(Graph &G,int v) a. 从v开始遍历,设置计数器num=0 ,并置顶点v已访问;b. for语句(i=1 to G.vexnum)判断 G.arcsvi!=0&visitedi=0,如果是递归调用深度优先遍历的递归算法函数DepthDisp(G, i),如果不是则退出;c. 用for和if 语句判断是否所有的顶点都已经遍历完,if numG.vexnumfor (i=1 to G.vexnum ) if (visitedi=1) i+如果不是,则继续调用 深度优先遍历的递归算法函数 DepthDisp(G,i);step6:实

5、现广度优先遍历的非递归算法函数 WidthDisp(Graph &G)a. 输入广度优先遍历的出发点m ,判断0m G.vexnum,如果不是,则返回重新输入;b. for ( i=1 to G.vexnum)判断第i个顶点与第m之间是否有边,有边则输出,k+,判断k=G.vexnum,等于,则退出,遍历完毕,不等于,转到与m有边的顶点继续遍历,要是有边的都已经遍历过,继续找一个没有遍历的顶点,继续;step7: 主函数直接调用CreatGraph(G), DispMatrix(G) ,DepthDisp(G,v) ,WidthDisp(G)函数即可;5 程序流程图: 1 创建无向图函数的流程

6、图如下:2深度优先遍历函数实现的流程图如下:3 实现广度优先遍历的流程图如下:6 源程序 /二,不带权值的无向图的遍历: #include#define MAXV 20 /定义顶点的最大个数struct Graph / 定义无向图的数据结构 int vexsMAXV;int arcsMAXV MAXV;int vexnum, arcnum; static int visitedMAXV;void CreatGraph(Graph &G) / 实现创建无向图的函数 int i, j, k, v, w;coutG.vexnum;while(G.vexnum MAXV) coutG.vexnum;

7、coutG.arcnum;while(G.arcnum G.vexnum*(G.vexnum-1)/2) /V个顶点最多V(V-1)/2个顶点 coutG.arcnum; for(i=0;i=G.vexnum;i+)for(j=0;j=G.vexnum;j+) G.arcsij=0;for(k=1;k=G.arcnum;k+) cout请输入第kvw; G.arcsvw=G.arcswv=1; / 无向图void DispMatrix(Graph &G) / 输出邻接矩阵 int i, j;cout 邻接矩阵为:endl;for(i=1;i=G.vexnum;+i) cout i;couten

8、dl;for(i=1;i=G.vexnum;+i) /默认第i个顶点的序号为i couti ; for(j=1;j=G.vexnum;+j) coutG.arcsij ; coutendl;void DepthDisp(Graph &G,int v) / 深度优先遍历的递归算法 int i; int num=0; coutv ; visitedv=1; num+; for(i=1;i=G.vexnum;i+) if(G.arcsvi!=0&visitedi=0) DepthDisp(G, i); if(numG.vexnum) /判断所有顶点是否都遍历完,如果没有继续遍历 for(i=1;i=

9、G.vexnum;i+) if (visitedi=1)i+; else DepthDisp(G,i); void WidthDisp(Graph &G) / 广度优先遍历的非递归算法 int i, j=0, k=0, l, m, n=1, flag=1;int aMAXV;for(i=0;iG.vexnum;i+) ai=0; coutm; while(mG.vexnum) coutm; cout广度优先遍历的序列为:; coutm ; ak=m; while(flag) for(i=1;i=G.vexnum;i+) if(G.arcsmi!=0) for(l=0;lk) couti ; k

10、+; ak=i; n+; if(n!=G.vexnum) /判断是否所有的顶点都已经遍历过,如果没有则继续寻找没有遍历的顶点继续遍历 m=a+j; else flag=0; coutendl;void main( ) Graph G; /生成一个图 int i,v;cout首先生成无向图: endl;CreatGraph(G);DispMatrix(G);for(i=0;iG.vexnum;i+) visitedi=0;coutv;DepthDisp(G,v); /调用三个函数coutendl;WidthDisp(G);第二部分 体会与建议1体会与收获: 通过实验,我学会了很多原来在上数据结构

11、理论课时所无法学到的知识,比如说怎样把一个程序尽可能地去完善,让它具有健壮性,以前,我总觉得数据结构上的东西比较抽象,不知道怎样去运用,现在我知道了而且也会用简单的数据结构编写程序,在编写图的遍历时我一开始就遇到了困难,用DIJ算法时发现它对非连通图无法完全遍历,结果我又是看书,又是调试,不过最后还是成功了这是让我最欣慰的。2建议与意见:觉得在计算机专业的课程安排上应该多一些实践环节,比如C语言,C+面向对象程序设计,数据结构,等等。作为我们计算机专业的学生来说要的就是实际操作的经验和在实际问题中处理问题的能力,这些能力从哪里来,就是从这些实验环节中获取。我觉得学校应该尽量多点时间把实验室开放,这样才能把大家的积极性调动起来,也可以组建一些对编程有极大兴趣的小组搞一些小的项目,来提高我们解决实际问题的能力。在这次过程中,我有好几道题都是有漏洞的,我觉得我们的理论课堂应当多涉及一些关于怎样消除程序当中的BUG的问题,我觉得这对提高我们编程的能力很有帮助,而且我们也希望多了解此类的知识。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1