



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
迷宫问题【问题描述】 以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 【基本要求】首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列教据的迷宫,输出的一条通路为:(1,1,1 ),(l , 2,2),(2,2,2),(3 ,2,3),(3 ,l, 2),。【测试数据】迷宫的测试数据如下:左上角(l,l)为入口右下角(8, 9)为出口。【实现提示】 计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北(编号分别为1,2,3,4)四个方向可通。 #include #include #define stackinitsize 200#define stackincrement 10typedef struct int x; int y;locat;typedef struct locat seat; int direct;SET;typedef struct SET *base; SET *top; int stacksize;stack;int mg1110;void initstack(stack &s) s.base=(SET *)malloc(stackinitsize*sizeof(SET); if(!s.base) exit(0); s.top=s.base; s.stacksize=stackinitsize;int empty(stack s) if(s.base=s.top) return 1; else return 0;int pass(locat e) if(mge.xe.y=0) return 1; else return 0;void printpass(locat e) mge.xe.y=7;void push(stack &s,SET e) if(s.top-s.base=s.stacksize) s.base=(SET *)realloc(s.base,(stackinitsize+stackincrement)*sizeof(SET); if(!s.base) exit(0); s.top=s.base+s.stacksize; s.stacksize+=stackincrement; *s.top=e; s.top+;locat next(locat e,int n) locat E; switch(n) case 2:E.x=e.x+1; E.y=e.y; break; case 1:E.x=e.x; E.y=e.y+1; break; case 4:E.x=e.x-1; E.y=e.y; break; case 3:E.x=e.x; E.y=e.y-1; break; return E;int down(stack &s,SET &e) if(s.base=s.top) return 0; else s.top-; e=*s.top; return 1; void printunpass(locat e) mge.xe.y=3;int maze() stack s; initstack(s); locat curpos,start,end; start.x=1; start.y=1; end.x=9; end.y=8; SET e; curpos=start; do if(pass(curpos) printpass(curpos); e.seat=curpos; e.direct=1; push(s,e); if(curpos.x=end.x&curpos.y=end.y) return 0; curpos=next(e.seat,e.direct); else if(!empty(s) down(s,e); while(e.direct=4&!empty(s) printunpass(e.seat); down(s,e); if(e.direct4) e.direct+; push(s,e); curpos=next(e.seat,e.direct); while(!empty(s); printf(No Way!n); return 0;void print() int i,j; printf(*n); for(i=0;i11;i+) for(j=0;j10;j+) switch(mgij) case 0:printf( ); break; case 1:printf(); break; case 3:printf(); break; case 7:printf(O ); break; printf(n); int main() FILE *fp; i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 掌握纺织品检测报告的标准格式与内容试题及答案
- 硫铵考试试题及答案
- 助理广告师考试市场营销对社会责任的探索与品牌价值提升策略试题及答案
- 传统技艺与现代设计结合的可行性研究试题及答案
- 少先队的测试题及答案
- 发酵工程考试题及答案
- 2024年纺织品证书考试要点试题及答案
- 化水水处理试题及答案
- 2024年纺织品设计师证书的成功经验分享试题及答案
- 对比分析2024年纺织工程师考试的试题及答案
- 宝洁波士顿矩阵案例分析课件
- 【MOOC】电子技术应用实验2(数字电路综合实验)电子科技大学章节作业中国大学慕课答案
- DB45T 2306-2021 百香果无病毒健康种苗栽培技术规程
- 电工电子技术(第3版) 课件 1.7 基尔霍夫定律
- 2024年度食品饮料品牌授权区域代理销售合同书3篇
- 关于清理35KV高压架空线路树障的安全技术措施
- 人音版音乐七年级上册《友谊地久天长》课件
- 人体损伤致残程度分级(2017)全文
- 美国加州租房合同范本(2篇)
- 2025年中考复习必背外研版初中英语单词词汇(精校打印)
- 统编版二年级语文下册第7单元大单元公开课一等奖创新教学设计 和配套作业设计
评论
0/150
提交评论