迷宫问题演示程序.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
迷宫问题演示程序

迷宫问题演示程序以一个n*n的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。迷宫问题要求求出从入口(1,1)到出口(n,n)的所有通路,或得出没有通路的结论。具体要求是:程序启动后显示一张迷宫图板,用白色的方格表示通路,黑色的方格表示障碍。用户可以通过点击的方式改变迷宫图板上通路,设置新的迷宫状态图,然后可以由用户按“开始执行”按钮,即可在迷宫图板上显示从入口(1,1)到出口(n,n)的所有通路。仿照递归函数Trail(int i),编制求解迷宫问题的递归函数MazeTrail(int x,int y)。程序的实现要点如下:1对于试探中的每一个位置均可试探东南西北四个方向。可预先设置一个常量数组,记录当前位置与下一个位置的坐标变化。int d[2][4]={{0,1,0,-1}, {1,0,-1,0},}; //南、东、北、西2设置一个二维数组int maze[10][10]表示迷宫的状态,数组元素0表示通路,数组元素1表示障碍。对于已经过的路径也要在该数组中进行标记,例如用整数2表示该位置已经过。最佳答案 #includestdio.h #includestdlib.h #define M 15 #define N 15 struct mark //定义迷宫内点的坐标类型 { int x; int y; }; struct Element //恋栈元素,嘿嘿。。 { int x,y; //x行,y列 int d; //d下一步的方向 }; typedef struct LStack //链栈 { Element elem; struct LStack *next; }*PLStack; /*************栈函数****************/ int InitStack(PLStack S)//构造空栈 { S=NULL; return 1; } int StackEmpty(PLStack S)//判断栈是否为空 { if(S==NULL) return 1; else return 0; } int Push(PLStack S, Element e)//压入新数据元素 { PLStack p; p=(PLStack)malloc(sizeof(LStack)); p-elem=e; p-next=S; S=p; return 1; } int Pop(PLStack S,Element e) //栈顶元素出栈 { PLStack p; if(!StackEmpty(S)) { e=S-elem; p=S; S=S-next; free(p); return 1; } else return 0; } /***************求迷宫路径函数***********************/ void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2]) { int i,j,d;int a,b; Element elem,e; PLStack S1, S2; InitStack(S1); InitStack(S2); maze[start.x][start.y]=2; //入口点作上标记 elem.x=start.x; elem.y=start.y; elem.d=-1; //开始为-1 Push(S1,elem); while(!StackEmpty(S1)) //栈不为空 有路径可走 { Pop(S1,elem); i=elem.x; j=elem.y; d=elem.d+1; //下一个方向 while(d4) //试探东南西北各个方向 { a=i+diradd[d][0]; b=j+diradd[d][1]; if(a==end.x b==end.y maze[a][b]==0) //如果到了出口 { elem.x=i; elem.y=j; elem.d=d; Push(S1,elem); elem.x=a; elem.y=b; elem.d=886; //方向输出为-1 判断是否到了出口 Push(S1,elem); printf(\n0=东 1=南 2=西 3=北 886为则走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n); while(S1) //逆置序列 并输出迷宫路径序列 { Pop(S1,e); Push(S2,e); } while(S2) { Pop(S2,e); printf(--(%d,%d,%d),e.x,e.y,e.d); } return; //跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴} if(maze[a]

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档