- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迷宫(C语言版)--数据结构课程设计
一. 迷宫问题求解
1. 问题描述
迷宫问题是实验心理学的一个经典问题,心理学家把一只老鼠从一个无顶盖
的大盒子的入口出赶迷宫。迷宫中设置了很多隔壁,对前进方向形成了多出障碍,
心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找路径以到
达出口。然而,用计机模拟迷宫问题,即划好迷宫的隔壁的设置,让计算机从入
口处进入迷宫探究出一条通路。
2. 设计思路
回溯法是一种不断试探且及时纠正错误的探索方法。下面的求解过程既是使
用回溯法。从入口出发,按某一个方向向前探索,若能走通并且未走过,即某处
可以到达,则到达新点,否则试探下一个方向;若所有的方向均没有通路,则沿
原路返回前一个点,换下一个方向继续探索,直到找到一条通路,或无路可走又
返回到入口点。
在求解过程中,为了保证在到达某一点后不能向前继续行走 (无路)时,能
正确返回前一个点以便继续从下一个方向向前试探,则需要用一个栈保存所有到
达点的下标。
另外,求解该问题的一个重要问题是如何防止回溯时走重复节点,以避免发
生死循环。这里,我们采用对走过的结点,修改其结点信息。如在设计之初,我
们设置保存迷宫结构的二维数组中0值代表该节点可走,1值代表其不可走,那
么我们可以把走过的结点值改为非0,已使其不能被再次探索。
3.数据结构设计
由上面的设计思路知,若想正确的使用回溯法求解迷宫问题,必须要借助一
个栈以保存走过的结点信息。而这里我活用了栈,只把其数据结构抽象为了一个
结构体数组,具体设计如下:
typedef struct
{
int x,y; /*记录迷宫结点的位置信息*/
}pos;
pos Pos[100]; /*结构体数组以保存走过的结点信息*/
4.功能函数介绍
(1)判断是否找到出口函数Isover ();
该函数的参数是当前结点的x、y坐标与出口结点的x、y坐标,通过比较其
值来判断是否找到出口结点,从而控制程序结束。
(2)对程序相关信息的简单介绍函数introduce();
该函数主要是在进行绘制迷宫的图形化界面之前开发者搞的一点小插曲,以
介绍跟该程序的相关的部分信息。
(3)用回溯法探究迷宫出口函数mazepath ();
该函数即是利用回溯法探究迷宫问题。
函数从接受的起点出发,逐个向其可走方向进行探究,并同时把其所走过的
结点的结点信息值改为迷宫现有探索结点中为有效的个数,以避免走重复结点。
同时该函数在探索一条有入口到出口的路径的同时,加入了一些图像处理函数,
把迷宫的探索的过程动态的显示出来,个人对迷宫探索的思路已较为直观的感
觉。
(4) 主函数main()
该函数中处理了图形设备的初始化及迷宫结构的初始化工作,同时在调用上
述功能函数完成迷宫探索路径问题的同时,加入了探索完成后的一些图形界面的
显示内容。
5.编码实现
#includegraphics.h
#includestdio.h
#includemalloc.h
#includetime.h
#includestdlib.h
#includestring.h
#define MaxSize 8
#define StartPx 170
#define StartPy 150
typedef struct
{
int x,y;
}pos;
pos Pos[100];
int Isover(int s_x,int s_y,int e_x,int e_y)
{ /*判断是否找到出口*/
if(s_x e_xs_y e_y)
return 1;
else return 0;
}
void mazepath(int m_mazeArray[][MaxSize],int s_x,int s_y,int e_x,int
e_y)
{
int count 0,sum 0;
int str[80];
m_mazeArray[s_y][s_x] -1;
Pos[count].x s_x;
Pos[count].y s_y;
while(!Isover(s_x,s_y,e_x,e_y))
{
if(m_mazeArray[s_y][s_x+1] 0)
{
sum++;
m_mazeArray[s_y][++s_x] ++count;
您可能关注的文档
最近下载
- 中学地理学科课程标准与教材研究教学大纲.pdf VIP
- 中建X局各类建筑工程技术经济指标.docx VIP
- 我们的手上有多少细菌?.doc VIP
- 第一单元 观察物体 大单元教学设计2025数学人教版三年级上册(新教材).pdf
- 年东北财经大学国际商学院(校本部) 联招联考项目招生指南.pdf VIP
- 驾驶员安全生产操作规程 - 生产安全.docx VIP
- 公务员(国考)之行政职业能力测验题库附答案(基础题)收藏.docx VIP
- 全册部编版六年级上册全册道德与法治教学课件.pptx
- 第二章-空气流动压力及阻力.pptx VIP
- 2025年全国农产品质量安全检测技能竞赛理论知识考试题库(含答案.docx VIP
文档评论(0)