ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:18.62KB ,
资源ID:15118199      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15118199.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(迷宫生成及寻路右手贴墙 C++实现Word格式文档下载.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

迷宫生成及寻路右手贴墙 C++实现Word格式文档下载.docx

1、/0上,1下,2左,3右 isVisit=false; private: bool isVisit;/节点是否被访问 int x,y;/横纵坐标 int wall4;/四堵墙;class Point int direction;/走的方向 /横纵坐标 int x; int y;class maze maze(int m=11,int n=11); void generator();/迷宫生成器 void printMaze();/打印迷宫 bool judgeCell(int ,int );/判断当前节点的某个相临节点是否能成为下个当前节点 void breakWall(MazeCell*);

2、/拆掉两个节点之间墙的函数 void travel();/迷宫寻路函数 maze();/必须要有析构函数清除动态申请内存,防止内存泄露 int startPoint;/迷宫入口格子开始的横坐标 int endPoint;/迷宫出口格子的纵坐标 int row;/节点矩阵行数 int column;/节点矩阵列数 stack mazeStack;/存放节点的堆栈 MazeCell* matrix;/生成迷宫的节点矩阵 int total;/节点的总个数 int visit;/被访问过的节点个数 int* graph;/迷宫图 int graphRow;/迷宫的行数 int graphColumn

3、;/迷宫的列数 MazeCell* currentCell;/记录深度优先遍历节点时正在访问的节点 Point goPoint;/记录迷宫寻路时当前所在位置(格子)的信息/定义走迷宫时的方向,分别为上下左右const int shang=0;const int xia=1;const int zuo=2;const int you=3;maze:maze(int m,int n) while(m%2=0|n%2=0) coutmn; visit=0;/访问过的节点数应当初始化为0 /注意最后生成的迷宫与所构造的节点矩阵应当有这样的关系,row column指的是节点矩阵的行列 row=(m-1

4、)/2; column=(n-1)/2; total=row*column;/所有的节点数 srand(time(0); /初始化节点矩阵 matrix=new MazeCell*row; for(int i=0;row; matrixi=new MazeCellcolumn; for(int j=0;jcolumn;j+) matrixij.x=i; matrixij.y=j; /注意矩阵节点跟迷宫格子的关系 graphRow=m; graphColumn=n; /初始化迷宫 graph=new int*graphRow;graphRow; graphi=new intgraphColumn

5、;graphColumn; graphij=1; graph2*i+12*j+1=0;/把迷宫中除了代表(矩阵节点及节点相邻的四堵墙)的其他格子弄为墙maze() delete matrixi; delete matrix; delete graphi; delete graph;void maze:printMaze() if(graphij=0)/没有走过的格子 coutx!=currentCell-x)/关系为上下相邻 relation=tempCell-x-currentCell-x; if(relation=1) currentCell-wall1=tempCell-wall0=0;

6、 elsewall0=tempCell-wall1=0; else/左右相邻y-currentCell-y; currentCell-wall3=tempCell-wall2=0;wall2=tempCell-wall3=0;bool maze:judgeCell(int x,int y)/判断当前节点的某个相临节点是否能成为下个当前节点 /是否有效,木有越界 if(xrow-1) return false; if(ycolumn-1) /是否被访问过 if(matrixxy.isVisit) return true;generator() int count1=0,count2=0;/cou

7、nt1为记录前一个被访问节点(堆栈顶部节点)有效相邻节点数,count2为当前访问节点的有效相邻节点数 currentCell=&matrix00;/从0,0开始访问,也可以随机取一个节点 currentCell-isVisit=true;/初始点为0,0,并标记 visit+=1; int currentX=currentCell- int currentY=currentCell- MazeCell* tempCell;/存放选好的下一个要访问的节点 while(totalvisit)/当还有点没被访问时 int i=0;/记录有效相邻节点数 MazeCell* temp4;/存放有效相邻

8、节点的数组 if(judgeCell(currentX+1,currentY) tempi=&matrixcurrentX+1currentY; i+; if(judgeCell(currentX-1,currentY)matrixcurrentX-1currentY; if(judgeCell(currentX,currentY+1)matrixcurrentXcurrentY+1; if(judgeCell(currentX,currentY-1)matrixcurrentXcurrentY-1; if(visit=0) count2=i; int tempp; tempp=count2;

9、 count1=tempp; if(i0) int s=rand()%i;/从有效相邻节点中随机选取一个出来作为下一个要访问的节点 tempCell=temps; breakWall(tempCell);/拆墙 mazeStack.push(*currentCell);/将上一个节点进栈 currentCell=tempCell; visit+; currentX=currentCell- currentY=currentCell- if(!mazeStack.empty()&count11)/当前节点无有效的相邻节点,并且前一个节点并非仅仅只有当前节点一个有效相邻节点(避免死循环)原路返回,返回到上一个节点 currentCell-isVisit=false; visit-; currentCell=&mazeStack.top(); mazeStack.pop(); else/如若上一个被访问节点只有当前节点一个有效相邻节点,则从所有被访问过的节点中随机选取一个作为当前节点(从路径展开分支,保证路径不会断) mazeStack.push(*currentCell); int a1=rand()%row,a2=rand()%column; while(!matrixa1a2.isVisit)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1