迷宫课程设计.docx
- 文档编号:8048943
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:28
- 大小:96.26KB
迷宫课程设计.docx
《迷宫课程设计.docx》由会员分享,可在线阅读,更多相关《迷宫课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
迷宫课程设计
暑
期
课
程
设
计
题目:
多功能迷宫游戏
学院:
计算机与信息学院
班级:
信息112
姓名:
郑少飞
学号:
3110702228
目录
一、前言………………………………………………………2
二、问题背景…………………………………………………2
三、问题分析…………………………………………………2
四、试探方向…………………………………………………2
五、求解算法…………………………………………………3
六、程序代码…………………………………………………4
七、运行结果…………………………………………………18
一.前言:
学院安排的暑期课程设计是对我们学生的专业知识和动手实践能力的一次颇有益处的检验。
院老师为我们制定了众多的课题,由我们自己根据自身能力与专长进行选择,培养分析问题、解决问题能力。
即使是一个简单的程序,依然需要学生有条不理的构思。
有利于培养严谨认真的学习态度,在程序设计过程里,当我们输入程序代码的时候,如果不够认真或细心,那么可能就导致语法错误,从而无法得出运行结果。
那么,这个我们反复调试,反复修改的过程,其实也是对我们认真严谨治学的一个锻炼。
在设计的过程中,会碰到某些必须加以克服的困难和障碍,这些困难构成真正的、我们渴望以挑战而接受的问题。
在攻克这些难题,寻找解决它们的办法时,我们自身的能力得到很大程度的提高,让我们体会到治学态度端正的重要性。
二:
问题背景:
迷宫求解是实验心理学中的一个经典问题,心理学家把一只小老鼠从一个无顶盖的盒子的入口赶进迷宫,迷宫中设置很多墙壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口,便由此衍生出了迷宫求解问题!
三:
问题分析
迷宫问题中,在寻找路径时,采用的方法通常是:
从入口出发,沿某一方向向前试探,若能走通,则继续向前进;如果走不通,则要沿原路返回,换一个方向再继续试探,直到所有可能的能跟都试探完成为止。
为了保证在任何位置上都能沿原路返回(回溯),要建立一个后进先出的栈来保存从入口到当前位置的路径。
回溯法是一种不断试探与及时纠错的探索方法, 为便于回溯,对于可走的方块都要进栈,并试探它的下一个可走方位,将这个可走的方位保存到栈中
求解路径过程为:
先将入口进栈(初始方位设置为-1),在栈不为空时循环:
取栈顶方块(不退栈),若是出口,则输出栈中方块即为路径。
否则,找下一个可走的相邻方块,若不存在这样的方块,则退栈。
若存在,即将其方位保存到栈顶元素中,并将这个可走相邻方块进栈(初始方位设置为-1)。
四:
试探方向
在迷宫中,每个点有四个方向可以去试探,如果当前点的坐标(x,y),与其相邻的四个点的坐标都可以根据与该点的相邻方位而得到,如下图:
因为出口在(m,n),因此试探规则为:
从当前的位置向前试探的方向从正东为从正东顺时针方向进行。
为了简化问题,方便求出新点的坐标,将从正东开始顺时针进行的这四个方向的坐标增量放在一个结构数组move【4】中,在move数组中,每个元素有两个域组成,x为横坐标增量,y为纵坐标增增量,move数组如图:
X
Y
数组下标
0
1
0
1
0
1
0
-1
2
-1
0
3
Move数组定义如下:
Typedefstruct{
intx,y;
}item;
Itemmove[4];
五:
求解算法:
(1)栈初始化;
(2)将入口点坐标及到达该点的方向(设为-1)入栈;
(3)while(栈不空){
栈顶元素>=(x,y,d)
出栈;
求出下一个要试探的方向d++;
While(还有剩余的试探方向时){
If(d方向可走){
(x,y,d)入栈;
求新点坐标(i,j);
将新点坐标(i,j)切换为当前点(x,y);
If((x,y)==(m,n)){
结束;
}
Else{
重置d=0;
}
}
Else{
D++;
}
}
}
六:
程序代码:
#include
#include
#include
#include
#include
usingnamespacestd;
#definemaxsize100
intmi_gong[maxsize][maxsize];//定义迷宫,此迷宫中0代表有路径1代表没有路径
inthang_shu;//行数
intlie_shu;//列数
charjian_li_mi_gong_fang_shi;//建立迷宫的方式选择,1代表手动2代表自动(用了文件流)
intji_cun[maxsize][maxsize];
intzhao_dao=0;
typedefstruct
{
intzong;//纵
intheng;//横
}cun_chu_zuo_biao;
cun_chu_zuo_biaocun_chu[maxsize];
/*接下来定义栈*/
typedefstruct
{
intx;
inty;
intd;
}datatype;
typedefstruct
{
datatypedata[maxsize];
inttop;
}seqstack,*pseqstack;
/*定义栈完成*/
/*接下来定义增量数组*/
typedefstruct
{
intx;
inty;
}item;
/*定义增量数组完成*/
/*接下来栈的初始化*/
pseqstackinit_seqstack(void)
{
pseqstacks;
s=(pseqstack)malloc(sizeof(seqstack));
if(s)
{
s->top=-1;
}
returns;
}
/*栈的初始化完成*/
/*接下来判断栈空*/
intempty_seqstack(pseqstacks)
{
if(s->top==-1)
{
return1;
}
else
{
return0;
}
}
/*判断栈空完成*/
/*接下来入栈*/
voidpush_seqstack(pseqstacks,datatypex)
{
if(s->top==maxsize-1)
{
cout<<"栈满!
!
!
"< } else { s->top++; s->data[s->top]=x; } } /*入栈完成*/ /*接下来是出栈*/ datatypepop_seqstack(pseqstacks) { datatypex; if(empty_seqstack(s)) { cout<<"栈空! ! ! ! "< } else { x=s->data[s->top]; s->top--; } returnx; } /*出栈完成*/ voidkai_shi_jie_mian()//开始的欢迎界面 { charb=3; chara=5; cout<<"\n\n"; cout<<""; for(intbb=0;bb<60;bb++) { cout< } for(bb=1;bb<=5;bb++) { cout<<"\n"; cout<<""; cout< cout<<""; cout< } cout<<"\n"; cout<<""; cout< cout<<"迷宫演示系统欢迎您的到来"; cout< for(bb=1;bb<=5;bb++) { cout<<"\n"; cout<<""; cout< cout<<"";
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迷宫 课程设计