免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验八 图的创建与遍历实验目的: 通过上机实验进一步掌握图的存储结构及基本操作的实现。实验内容与要求: 分别基于邻接矩阵和邻接表存储结构实现图的基本运算,要求: 能根据输入的顶点、边/弧的信息建立图; 实现图中顶点、边/弧的插入、删除; 实现对该图的深度优先遍历;实现对该图的广度优先遍历。源程序:#include#include#define intinity 1024#define maxvex 20typedef structchar vexmaxvex;int arcsmaxvexmaxvex;Mgraph;数组式结构体void Createmgraph(Mgraph &G,int n)创建邻接矩阵图函数,这个简单按照一般步骤就可以了int i,j; printf(请输入顶点n); for(i=1;i=n;i+)scanf(%c,&G.vexi); fflush(stdin); printf(请输入邻接矩阵(先行后列)n); for(i=1;i=n;i+) for(j=1;j=n;j+) scanf(%d,&G.arcsij); fflush(stdin); printf(创建图的邻接矩阵为n); for(i=1;i=n;i+)printf(%3c,G.vexi);这里动脑筋使他输出的界面看起来就像是一个矩阵,对位置和空格进行了调整。 printf(n);for(i=1;i=n;i+) printf(%c,G.vexi);for(j=1;j=n;j+) printf(%2d ,G.arcsij); printf(n);void Insertmgraph(Mgraph &G,int n)插入函数,这里有个缺陷,只能在尾部插入,那就简单了int i,j;printf(请输入插入的节点n);scanf(%c,&G.vexn+1);printf(请输入扩建的邻接表(先行后列)n);for(j=1;j=(n+1);j+)scanf(%d,&G.arcsn+1j); fflush(stdin);for(i=1;i(n+1);i+)scanf(%d,&G.arcsin+1); fflush(stdin);printf(输出新的图n);for(i=1;i=(n+1);i+)printf(%3c,G.vexi); printf(n);for(i=1;i=(n+1);i+) printf(%c,G.vexi);for(j=1;j=(n+1);j+) printf(%2d ,G.arcsij); printf(n);void Deleatmgraph(Mgraph &G,int n,int m)删除函数,这里不局限在哪一个点,删哪一个都可以,不过删最后对下面有好处。int i,j; printf(请输入要删除的节点n); scanf(%c,&G.vexm); for(i=m;in;i+) G.vexi=G.vexi+1; for(i=1;i=n;i+) for(j=m;jn;j+) G.arcsij=G.arcsij+1; for(j=1;jn;j+) for(i=m;in;i+) G.arcsij=G.arcsi+1j; printf(输出新的图n); for(i=1;in;i+) printf(%3c,G.vexi); printf(n); for(i=1;in;i+) printf(%c,G.vexi); for(j=1;jn;j+) printf(%2d ,G.arcsij); printf(n); void Bfstraverse(Mgraph &G,int n)广度遍历函数,由于每个函数之间都有影响所以不得不在深度函数前运行int i,j,t,k=2; char a20; a1=G.vex1;这里偷懒了,借助第二个字符数组来存储上三角矩阵信息,折掉一半简单了些,而且我还发现居然遍历的顺序就是每行元素信息的存储,比如在第一行靠前出现的必定在下一行也是靠前出现,而这个出现的会先重叠,就给函数简化了 for(i=1;i=n;i+) for(j=i;j=n;j+) if(G.arcsij!=0) ak+=G.vexj;t=k;t做记录步骤的参数,很重要for(i=1;i=t;i+)if(ai!=ai+1)控制输出就可以了,相同的不输出 printf(%c ,ai);printf(n); void Dfstraverse(Mgraph &G,int n,int i,int s)这个深度遍历可谓绞尽脑汁啊,写得想吐了,耗时一天,看书不懂,网上连类似的都找不到,我知道递归,但是要控制递归的运行,有很多条件的,即使是无向图也是很复杂的,要考虑好多种情况,感觉自己在这里都还没写全,必定还有其他情况,那就还得改条件,实在不想去想了int k,t,j=1; if(s=n) 用n作为外部递归循环的记录,否则就会是无限循环,很重要if(i=n)在大循环下考虑直线情况,循环限制数也是nprintf(%c ,G.vexi); while(G.arcsij!=1&jn)从第i行的第j个非零数开始,下次递归就到第j行去了 j+;k=j;用k做替换记录 if(G.arcsik!=0)列出非0的情况 for(t=k;t=n;t+)用for循环把对角线列元素化为0,才使得下面递归步骤判定的时候能够进行 G.arcsti=0; Dfstraverse(G,n,k,s+1);非0情况递归 Else考虑行为0的情况,也就是单个点 Dfstraverse(G,n,i+1,s+1);void main()主函数简单,就是要注意元素的加减,对下面的函数是有影响的,无影响函数我不会写int n,m; Mgraph G; printf(请输入顶点数n);scanf(%d,&n); fflush(stdin); Createmgraph(G,n); Insertmgraph(G,n); printf(请输入删除节点位置n); scanf(%d,&m); fflush(stdin); Deleatmgraph(G,n+1,m);列如在此处注意前面总数插入一个也就是加了一个printf(输出广度遍历n); Bfstraverse(G,n);printf(输出深度遍历n); Dfstraverse(G,n,1,1);printf(n);运行结果:心得体会:图是个大概念,此次我只选取了无向图,简单一点,程序的创建;插入;删除都十分简单,但是深度和广度遍历就困难了,特别是深度遍历,就像
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 用催化剂行业深度研究报告
- 中国鸭雏项目投资可行性研究报告
- 中国天然板材项目投资可行性研究报告
- 中国空压外螺纹转角缸项目投资可行性研究报告
- 多用途杭锈剂行业深度研究报告
- 中国粘结永磁项目投资可行性研究报告
- 中国溶剂型粘合剂项目投资可行性研究报告
- 中国全棉印花毛圈布项目投资可行性研究报告
- 中国钻铣机床项目投资可行性研究报告
- 中国连续低温干燥杀菌机项目投资可行性研究报告
- 骨科基础知识测试题(含答案)
- 石墨烯尼龙眼镜架
- 2025年中国邮政航空有限责任公司校园招聘笔试参考题库附带答案详解
- 2024年山东省滨州市社会工作者职业资格社会工作实务(初级)真题含答案
- 数学听评课记录听评课记录(高中数学)x
- 农行对公开户讲解
- 2025年中医内科正高职称真题及答案【回忆版】
- 2025年国家级检验检测机构资质认定评审员考试在线题库(附答案)
- 2026年高考英语一轮复习:人教版全7册必背词汇清单-默写版(含答案)
- 热处理外协加工协议2025年
- 人工智能实训基地建设与运行方案
评论
0/150
提交评论