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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(课程设计-图的遍历.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

课程设计-图的遍历.doc

1、1目 录一、课题的主要功能 .21.1 设计内容 21.2 对课程设计功能的需求分析 2二、课题的功能模块的划分 .22.1 模块划分 22.2 系统的概要设计 3三、主要功能的实现 .43.1 算法思想 41.图的邻接矩阵的建立 42.图的遍历的实现 43.2 数据结构 43.3 主函数流程图 53.4 深度优先遍历流程图 63.5 深度优先遍历递归 73.6 深度优先遍历流程图 93.7 广度优先遍历递归流程图 .10四、程序调试 114.1 程序的调试分析 .114.2 程序的测试结果 .11五、总结 16六、附件 166.1 源程序 .162一、课题的主要功能1.1 设计内容演示图的深

2、度优先, 广度优先遍历过程,并输出原图结构及遍历结果。要求图的结点数不能少于 6 个。可以由系统随机生成图,也可以由用户手动输入图。报告中要写出画图的思路;画出图的结构,有兴趣的同学可以进一步改进图的效果。1.2 对课程设计功能的需求分析图的遍历并不需要是一个过于复杂的工作环境,一般来说:最合适的才是最好的。软件设计必须符合我们使用实际情况的需要。根据要求,图的遍历主要功能如下:1.用户可以随时建立一个有向图或无向图;2.用户可以根据自己的需要,对图进行深度遍历或广度遍历;3.用户可以根据自己的需要对图进行修改;4.在整个程序中,用户可以不断的按照不同的方式对图进行遍历,若不继续,用户也可以随

3、时跳出程序,同时,如果用户输入的序号错误,程序会提示用户重新输入序号;二、课题的功能模块的划分2.1 模块划分1.队列的初始化、进队、出队、队列空、队列满的函数void InitQueue(CirQueue *Q) /初始化队列int QueueEmpty(CirQueue *Q)/队列是否为空int QueueFull(CirQueue *Q)/队列满Void EnQueue(CirQueue *Q,int x)/将队员进队int DeQueue(CirQueue *Q)/将队员出队2.创建图的函数void CreateMGraph(MGraph *G)/根据用户需要创建一个图3.图的深度优

4、先遍历递归void DFSM(MGraph *G,int i)/*含有输出已访问的顶点的语句*/34.图的广度优先遍历递归 void BFSM(MGraph *G,int k) /*含有输出已访问的顶点的语句*/5.深度优先遍历 void DFSTraverseM(MGraph *G)/*调用 DFSM 函数*/6.广度优先遍历 void BFSTraverseM(MGraph *G) /*调用 BFSM 函数*/7.主函数 main() /*包含一些调用和控制语句*/2.2 系统的概要设计开 始信息录入菜单选择深度优先修改信息广度优先退出程序4三、主要功能的实现3.1 算法思想本课题所采用的

5、是邻接矩阵的方式存储图,实现图的深度、广度两种遍历,并将每种遍历结果输出来。1.图的邻接矩阵的建立对任意给定的图(顶点数和边数自定) ,根据邻接矩阵的存储结构建立图的邻接距阵。2.图的遍历的实现图的遍历包括图的广度优先遍历与深度优先遍历。对于广度优先遍历应利用队列的五种基本运算(置空队列、进队、出队、取队头元素、判队空)来实现。首先建立一空队列,从初始点出发进行访问,当被访问时入队,访问完出队。并以队列是否为空作为循环控制条件。对于深度优先遍历则采用递归或非递归算法来实现,这里我所采用的是递归算法。3.2 数据结构#define Max 10#define FALSE 0#define TRU

6、E 1#define Error printf#define QueueSize 30typedef struct char vexsMax;int edgesMaxMax;int n,e;5MGraph;int visitedMax;typedef struct int front;int rear;int count;int dataQueueSize;CirQueue;3.3 主函数流程图登陆开始输入 ch26CreateMGraph(G);Ch1=yCh1=y 真假 012 33.4 深度优先遍历流程图Ch2Ch1=nCreateMGraph(G)DFSTraverseM(G) BFS

7、TraverseM(G)BFSTraverseM(G) DFSTraverseM(G) DFSTraverseM(G) DFSTraverseM(G) DFSTraverseM(G) DFSTraverseM(G)DFSTraverseM(G)B r ea k结束程序DFSTraverseM(MGraph *G)7真非零 零3.5 深度优先遍历递归i=0invisitedi=FALSEi+i=0!visitediDFSM(G,i)ini+结束程序8真 DFSM(MGraph *G,int i)visitedi=TRUEjnj=0G-edgesij=1int edgesMaxMax;int n,

8、e;MGraph;/*以邻接矩阵作为图的存储结构*/int visitedMax;/*将 visitedMax定义为全局变量并分配最大空间*/typedef struct 17int front;int rear;int count;int dataQueueSize;CirQueue;/*定义队列的数据结构*/初始化队列 void InitQueue(CirQueue *Q)Q-front=Q-rear=0;Q-count=0;/队列空int QueueEmpty(CirQueue *Q)return Q-count=QueueSize;/*返回队列的最大长度*/ /队列满int Queue

9、Full(CirQueue *Q)return Q-count=QueueSize;/*返回队列的最大长度*/ /进队void EnQueue(CirQueue *Q,int x)if(QueueFull(Q)/*队列满则出错*/Error(“Queue overflow“);18elseQ-count+;/*否则 count+,将 x 进队*/Q-dataQ-rear=x;Q-rear=(Q-rear+1)%QueueSize;/出队int DeQueue(CirQueue *Q)int temp;/*定义整型的变量*/if(QueueEmpty(Q)/*若为真则出错*/Error(“Que

10、ue underflow“);else/*为假则 count-,将队员出队*/temp=Q-dataQ-front;/*用 temp 返回其值*/Q-count-;Q-front=(Q-front+1)%QueueSize;return temp;/*返回出队元素值*/ /建立一个图void CreateMGraph(MGraph *G)int i,j,k;/*定义整型变量*/char ch1,ch2;/*定义字符型变量*/printf(“n 请输入顶点数,边数(格式:3,4):“);19scanf(“%d,%d“,/*输入图的顶点数和边数*/for(i=0;in;i+)getchar();p

11、rintf(“n 请输入第%d 个顶点序号“,i+1);scanf(“%c“,/*输入顶点的序号*/for(i=0;in;i+)for(j=0;jn;j+)G-edgesij=0;/*初始化矩阵*/for(k=0;ke;k+)getchar();printf(“n 请输入第%d 条边的顶点序号(格式:i,j):“,k+1);scanf(“%c,%c“,/*输入边的顶点序号*/for(i=0;ch1!=G-vexsi;i+);for(j=0;ch2!=G-vexsj;j+);G-edgesij=1;/*有边则赋值为 1*/ /深度优先遍历递归 void DFSM(MGraph *G,int i)

12、int j;printf(“%c “,G-vexsi);visitedi=TRUE;/*标记 visitedi*/*依次优先搜索访问 visitedi的每个邻接点*/20for(j=0;jn;j+)/*若 visitedi的一个有效邻接点 visitedj未被访问过,则从 visitedj出发进行递归调用*/if(G-edgesij=1 /广度优先遍历递归void BFSM(MGraph *G,int k)int i,j;CirQueue Q;/*定义一个队列 Q,初始化队列为空*/InitQueue(printf(“%c “,G-vexsk);/*访问初始点,并将其标记已访问过*/visit

13、edk=TRUE;EnQueue(/*将以访问过的初始点序号 k 入队*/while(!QueueEmpty(/*将队首元素出队*/for(j=0;jn;j+)/*依次搜索 vexsk的每一个可能的邻接点*/if(G-edgesij=1 /*标记 vexsj已访问过*/EnQueue(/*顶点序号 j 入队*/深度优先遍历void DFSTraverseM(MGraph *G)21int i;printf(“n 深度优先遍历序列:“);for(i=0;in;i+)visitedi=FALSE;/*访问标志数组初始化*/for(i=0;in;i+)if(!visitedi)/*对尚未访问的顶点调

14、用 DFSM*/DFSM(G,i); /广度优先遍历void BFSTraverseM(MGraph *G)int i;printf(“n 广度优先遍历序列:“);for(i=0;in;i+)visitedi=FALSE;/*访问标志数组初始化*/for(i=0;in;i+)if(!visitedi)/*对尚未访问的顶点调用 BFSM*/BFSM(G,i);22 main()MGraph *G,a;char ch1;int i,j,ch2;G=printf(“ntt 深度优先搜索和广度优先搜索 n“);CreateMGraph(G);/*调用创建图矩阵的函数*/getchar(); ch1=y

15、;/*设置控制语句标志*/while(ch1=y|ch1=Y) /*菜单栏*/printf(“n“);printf(“ 选择菜单“); printf(“ntt*n“);printf(“tt* 更改数据请按:1 *n“);printf(“tt* 深度优先搜索请按:2 *n“);printf(“tt* 广度优先搜索请按:3 *n“);printf(“tt* 退出搜索请按:0 *n“);printf(“tt*n“);printf(“ntt 请选择菜单号(0-3):“);scanf(“%d“,getchar();switch(ch2)case 1:CreateMGraph(G);/*选 1 创建一个新

16、的图矩阵*/break;23case 2:DFSTraverseM(G);/*选 2 进入深度优先搜索*/break;case 3:BFSTraverseM(G);/*选 3 进入广度优先搜索*/break;case 0:/*选 0 结束搜索,退出程序*/ch1=n;break;default:system(“cls“);printf(“ntt 输入有误!n“);break;if(ch2=1|ch2=2|ch2=3)printf(“nntt “);/*控制格式*/24计算机与通信学院课程设计评分表课程名称: 项 目 评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩教师签名: 日 期: (注:1此页附在课程设计报告之后;2综合成绩按优、良、中、及格和不及格五级评定。 )2

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报