- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迷宫问题
——王欣一.需求设计:以一个m*m 的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口的通道,或得出没有通路的结论。
二.概要设计:
存储结构:
采用了数组以及结构体来存储数据,在探索迷宫的过程中用到的栈,属于顺序存储结构。
/*八个方向的数组表示形式*/
int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1, 0},{-1, 1}};
/*用结构体表示位置*/
struct position
{
int x,y;
};
position stack[m*m+1];
基本算法:
走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、东南、南、西南、西、西北、北、东北8个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果8个方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。
每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。
用一个字符类型的二维数组表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。迷宫的入口点在位置(1,1)处,出口点在位置(m,m)处。设计一个模拟走迷宫的算法,为其寻找一条从入口点到出口点的通路。
二维数组的第0行、第m+1行、第0列、第m+1列元素全置成“1”, 表示迷宫的边界;第1行第1列元素和第m行第m列元素置成“0”, 表示迷宫的入口和出口;其余元素值用随机函数产生。
假设当前所在位置是(x,y)。沿某个方向前进一步,它可能到达的位置最多有8个。
如果用二维数组move记录8个方向上行下标增量和列下标增量,则沿第i个方向前进一步,可能到达的新位置坐标可利用move数组确定:
x=x+move[i][0]
y=y+move[i][1]
从迷宫的入口位置开始,沿图示方向顺序依次进行搜索。
在搜索过程中,每前进一步,在所到位置处做标记“?”
(表示这个位置在通路上),并将该位置的坐标压入栈中。
每次后退的时候,先将当前所在位置处的通路标记“?”改
成死路标记“×”(表示这个位置曾到达过但走不通,以后
不要重复进入),然后将该位置的坐标从栈顶弹出。
搜索到出口位置时,数组中那些值为“?”的元素形成一条
通路。
三.详细设计:
源程序:
/*
迷宫问题
走迷宫的过程可以模拟为一个搜索的过程:每到一
处,总让它按东、东南、南、西南、西、西北、北、东北
个方向顺序试探下一个位置;如果某方向可以通过,并且不
曾到达,则前进一步,在新位置上继续进行搜索;如果个
方向都走不通或曾经到达过,则退回一步,在原来的位置上
继续试探下一位置。
每前进或后退一步,都要进行判断:若前进到了出
口处,则说明找到了一条通路;若退回到了入口处,则说明
不存在通路。
用一个字符类型的二维数组表示迷宫,数组中每个元素
取值“0”(表示通路)或“1”(表示墙壁)。迷宫的入口点在
位置(1,1)处,出口点在位置(m,m)处。这个算法,为
其寻找一条从入口点到出口点的通路。
*/
#includestdio.h
#includeiostream
#includestdlib.h
#includetime.h
int main()
{
int m=1;
while (m!=0){
printf(输入m,使得为m*m的方阵迷宫(m0 输入0 时退出:)\n);
scanf (%d,m);
/*设定n*n的方阵迷宫*/
/*数组的形式表示八个方向*/
int move[8][2]={{0,1},{1,1},{1,0},
{1,-1},{0,-1},{-1,-1},{-1, 0},{-1, 1}};
/*用结构体表示位置*/
struct position
{
int x,y;
};
/*用于记录和输出迷宫探路中相关符号,包括1 .*/
char maze[m+2][m+2];
/*用栈来存储探路过程中的数据*/
position stack[m*m+1];
int top;/*栈顶*/
int i,x,y,ok;
position p;
/*二维数组的第0行、第m+1行、第0列、第m+1列元素全
置成1,表示迷宫的边界;第1行第1列元素和第m行第m列
元素置成0,表示迷宫的入口和出口;其余元素值用随机
函数产生。*/
srand(time(0));
for(x=1;x=m;x++)
for(y=1;y=m;y++)
maze[
您可能关注的文档
最近下载
- 2025秋统编版(2024)小学道德与法治三年级上册(全册)课时练习及答案(附目录).docx
- (2025秋新版)人教版三年级数学上册《观察物体》PPT课件.pptx VIP
- (鲁班奖)网架专家论证汇报资料.ppt VIP
- 行业资料 - 国家储备林改培技术规程-国家林业局.pdf VIP
- Q960E高强度调质钢焊接工艺研究.pdf VIP
- 2025-2026学年第一学期数学教研组工作计划.doc VIP
- ISO15378-2017药包材对ISO9001的应用.pptx VIP
- 13.1三角形的概念 课件(共24张PPT) 人教版(2025)数学八年级上册(含音频+视频).pptx VIP
- 2025级中职语文教学工作计划5篇.pdf VIP
- 第十章 商品的品名品质数量和包装.ppt VIP
文档评论(0)