1 / 24
文档名称:

C语言课程设计迷宫.docx

格式:docx   大小:215KB   页数:24页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言课程设计迷宫.docx

上传人:碎碎念的折木 2023/1/3 文件大小:215 KB

下载得到文件列表

C语言课程设计迷宫.docx

相关文档

文档介绍

文档介绍:该【C语言课程设计迷宫 】是由【碎碎念的折木】上传分享,文档一共【24】页,该文档可以免费在线阅读,需要了解更多关于【C语言课程设计迷宫 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。C语言课程设计报告
题目: 迷宫问题
姓名:班级:学号:组员:
指导教师:
学院:专业:
课程设计〔报告〕任务及评语
院〔系〕:
教研室:
学号
学生姓名
专业班级
程序设计
〔报告〕题目
迷宫问题
程序设计的任务与要求:
把握C语言编程的根底学问。
较娴熟地编写C语言应用程序。
程 〔3〕了解C语言的常用标准函数、编程技巧、特别处理。
序 〔5〕联系已学过的内容,稳固所学的理论,增加独立工作力气。设
计 〔6〕通过设计主要使学生有一个独立编写程序的过程,对理论学****及动手能

〔 力都有一个很大的提高。
告 〔7〕通过本次设计,进一步培育学生宠爱专业的思想,同时对本专业综合素

任 质的提高起一个乐观的推动作用。
务 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实****日记,标准完整地撰写出课程设计报告。
指导教师评语及成
绩 成绩: 指导教师签字:
年 月日
目录
第1章课程设计的目的与要求 1
课程设计目的 1
课程设计的试验环境 1
课程设计的预备学问 1
课程设计要求 1
第2章课程设计内容 2
程序功能介绍 2
程序整体设计说明 2
设计思路 2
数据构造设计及用法说明 3
程序构造〔流程图〕 4
各模块的功能及程序说明 6
程序结果 7
程序源代码及注释 7
第3章课程设计总结 17
参考资料 18
1
第1章课程设计的目的与要求
课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学****完《程序设计语言(C)》课程后进展的一次全面的综合练****本课程设计的目的和任务:
稳固和加深学生对C语言课程的根本学问的理解和把握
把握C语言编程和程序调试的根本技能
利用C语言进展根本的软件设计
把握书写程序设计说明文档的力气
提高运用C语言解决实际问题的力气
课程设计的试验环境
硬件要求能运行Windows2023/XP操作系统的微机系统。C语言程序设计及相应的开发环境。
课程设计的预备学问
生疏C语言及C语言开发工具。
课程设计要求
分析课程设计题目的要求
写出具体设计说明
编写程序代码,调试程序使其能正确运行
设计完成的软件要便于操作和使用
设计完成后提交课程设计报告
第2章课程设计内容
程序功能介绍
迷宫是深受大家宠爱的玩耍之一,本课题要求随机生成一个美观逼真的迷宫图,它是随机生成的且迷宫大小可以转变,迷宫的大小为N*N,N预定义为常数,修改N的值可以转变迷宫的大小〔只要不超过屏幕显示范围〕,而程序不必做修改。程序承受了两种运行方式:一种通过自动探究,这是用递归方法实现;一种是由人工操作探究通过,这利用了手动操作8个代表不同的方向的键位来实现。用白色表示可走的路,蓝色表示墙壁不行以通过。
程序整体设计说明
设计思路
一般的迷宫为二维平面图形,将迷宫的左上角作入口,右下角作出口,求出从入口点到出口点的一条通路,作为线性构造的典型应用,大多用非递归方法实现,输出用0代表通路,1代表墙壁。程序承受了一个美观逼真的迷宫图,而且是随机生成,迷宫的大小为N×N,N预定义为常数,修改N的值可以转变迷宫的大小〔只要不超过屏幕显示范围〕,而程序不必做修改。用白色表示可走的路,蓝色表示墙壁不行以通过。程序还设计了两种运行方式:
一种是由系统自动运行探究,用递归方法实现;
一种是由人工操作探究通路。系统运行首先消灭提示字符串“Pleaseselecthand(1)elseauto”,询问是选择人工探究还是系统自动探究,当用户输入字符1按回车键后消灭一个迷宫图,红色矩形块〔表示探究物〕消灭在左上角,这是可以代表4个方向的字符选择通路,遇到墙壁不能通行,按回车键完毕探究,假设这时探究物移动到右下角出口,则显示找到通路信息,否则显示没找到通路信息。在提示信息后,假设输入的字符不是1,则系统自动查找通路,假设没有找到通路,则显示没有找到通路信息。假设找到通路,则用红色标记走过的路径。程序首先要考虑迷宫的表示,这是一个二维关系图,典型的存贮储方式是选择二维数组,数组元素的值只有两种状态,所以取值为0或1,0表示通路,1表示墙壁,这里取名为map。图形的显示就可以依据数组元素的值来确定,假设是人工探究,则依据按键来确定探究物的位置坐标,利用循环语句即可实现,假设是系统自动探究,并且在4个方向进展递归算法,即可实现查找路径。
1
数据构造设计及用法说明.
用m行n列的m*n个正方格表示一个迷宫,其中划有斜线的方格表示不行通行,未划有斜线的方格表示可以通行。请编写查找从入口到出口的一条最短路径的程序。
迷宫的规格〔即行数与列数〕,状态设置(即各方格能否通行的状态),以及入口和出口的位置,均应由输入随机确定。
求得的最短路径,应当以从入口到出口的路径上的各个方格的坐标的线性序列输出。当无通路时,应当报告无路径的信息。
(3)尽量承受构造化程序设计方法,要求对各个模块的功能及参数作必要的说明
提示(1)迷宫可以承受matrix类型的二维数组A表示。。[i][j]表示迷宫中第i行第j列的一个方格,[i][j]=0表示该方格可以通行,[i][j]=1表示该方格不行以通行。(2)由于要查找从入口到出口的一条最短路径,最好将迷宫看作是一个图构造。则问题转化为查找从对应于入口顶点到对应于出口顶点的一条最短路径的问题。该问题可以承受从入口顶点动身,进展广度优先搜寻遍历,直到遇到出口顶点或者遍历完毕也没有遇到出口顶点为止。这二种状况分别对应于最短路径探究成功与查无通路的事实。
基于上述分析,涉及到数据构造的转换,马上二维数组表示的迷宫A转换为以adjlist类型的邻接表表示的图构造G。在图构造中,将迷宫中的每个方格看作是一个顶点。不行通行的方格都是孤立顶点;相邻的可通行的方格所对应的顶点之间看作是有边相连。因此迷宫可以看作是由m*n个顶点及无向边构成的一个非连通的无向图。尽管图是不连通的,但不影响本问题的求解,而且本问题有解的条件是:入口顶点与出口顶点在同一个连通重量中。图构造G中,[k]表示编号为k的顶点的邻接状况的单链表的头指针;,而且具有如下关系:=*
为了避开迷宫数据的重复输入,我们期望A能够自动地转换为G。因此应当设计一个转换算法create_adjlist(A,G)。而图构造中顶点是要编号的,我们商定以行为序,挨次给迷宫A中的方格所对应的顶点编号。这样迷宫中方格的坐标〔即行row和列col〕与图G中所对应的顶点的编号〔即verno〕之间具有如下关系:
verno=〔row-1〕*
n
+
col
row=〔verno-1〕/
n
+
1
col=〔verno-1〕%
n
+
1
1
在广度优先搜寻遍历求解最短路径过程中,应当设置一个队列queue作为关心数据构造;路径承受一个整数数组pred来表示。这二个数据构造的存储构造类型均为list类型,其说明定义如下:
typedefintlist[MAXVER];
队列queue应当设置front和rear分别指示列首与列尾,queue[k]表示第k个入列的顶点编号。承受pred记录路径,pred[i]表示顶点i在广度优先搜寻遍历过程中的前趋顶点的编号,它说明是经过边〔pred[i],i〕到达顶点i的。这样,当路径探究成功时,我们可以从出口顶点倒推出从入口到出口的一条路径来。固然要涉及到从顶点编号向方格坐标的反转换,这个公式在上面已经给出了。
程序构造〔流程图〕

1
开头
预定义
主函数main
定义二维数组Map[n][n]
清屏clrscr
输出字符串并初始化
init
随机生成迷宫(Maprand)
推断字符串是否
1if
手动探究PeopleFind
自动探究FindWay
输出结果Result
关闭图像Close
完毕

1
各模块的功能及程序说明
程序用二维数组表示迷宫
第一个模块—主函数main的功能是:首先确定是人工还是系统自动探究,通过输入字符选定。选定后调用图形初始化函数,接着调用迷宫生成函数及迷宫显示函数。然后依据输入的字符调用人工探究函数或自动探究函数,探究完毕进展结果处理,最终关闭图形系统,程序完毕。
其次个模块—初始化函数Init的功能是:由于迷宫是在图形方式下显示的,所以要进展图形初始化。
第三个模块—迷宫生成函数MapRand的功能是:用数组map表示一个迷宫,要随机生成迷宫,数组元素的值利用随机函数生成0或1的数。
第四个模块—迷宫显示函数PrMap的功能:依据数组map的值输出迷宫图,利用函数setfillstyle设置图形实体填充样式bar〔〕函数输出矩形块。数组元素的下标为矩形块的中心坐标,利用两重循环语句可以完成迷宫图的显示。
第五个模块—系统自动5FindWay的功能:从下标〔1,1〕开头探究,依次依据右下、下、右、右上、左、左下、左上的挨次前进,假设该方向上的值为0,则前进一步。
第六个模块—人工探究PeopleFind〔〕的功能:首先输出迷宫图以及人工把握操作图示,红色探究消灭在左上角,承受人工把握8个方向的移动,由于是8个方向,用光标键只能把握4个
方向,为了统一承受了接近的8个字符,Q,W,E,A,D,Z,X,C代表8个方向,按了字符后,对应方向不是墙壁,可以将红色探究物移到相应的位置,按回车表示结果人工操作。假设此时map数组元素的坐标是出口,则yes的值为1,探究成功,否则值为0。由于探究物不停的移动,要在
位置显示,并将走过的路恢复为白色通路,可以调用DrawPeople〔&x,&y,n〕
数x和y代表所在的行坐标和列坐标,n代表所选的方向,依据n的值,将x和y进展相应的变化.
第七个模块—结果处理函数Result〔〕:最终结果是找到和没找到两种状况,在程序中设计全局变量yes,依据yes的值进展处理。假设yes为0,调用函数NotFind〔〕,显示找到通路信息,否则调用函数Find〔〕。假设是系统自动探究,Find〔〕会显示出所走过的路径,如
果是人工探究,没有记录走过的路径,只显示找到通路的信息。
第八个模块—图形关闭函数Close〔〕的功能:调用Closegraph〔〕关闭图形系统,程序完毕。
1