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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(迷宫源代码文档格式.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

迷宫源代码文档格式.docx

1、& ly=pos.ly ); ; MazePos operator=(const MazePos pos) wx=pos.wx; ly=pos.ly; pass=pos.pass; path=pos.path; return *this;/End:MazePos-SElemType-/辅助栈元素类型class SElemType int ord; /迷宫通道块路径上的序号 MazePos seat; /通道块在迷宫中的位置坐标 int di; /从此通道块走向下一通道块的方向 /0:无效,1:东,2:南,3:西,4:北 bool operator=(const SElemType et) re

2、turn (seat=et.seat); SElemType operator=(const SElemType et) ord =et.ord ; seat =et.seat ; di =et.di ; return (*this);SElemType-/struct:MazeMap-/由通道块组成的迷宫地图#define MAPWIDTH 10#define MAPHEIGHT 10typedef struct MazeMap /由通道块矩阵构成 MazePos mazemapMAPWIDTHMAPHEIGHT;MazeMap;MazeMap-:MazeWay-/辅助出口路径链表元素类型t

3、ypedef struct MazeWayMazeWay;MazeWay-/Class:Maze-/主体类,迷宫路径问题求解class Maze Maze(int width=MAPWIDTH,int height=MAPHEIGHT); /生成迷宫地图 Maze(); void DoMaze(); /找出出口路径并显示private: bool InitOK; /初始化成功标志 MazeMap map; /迷宫地图 MazePos start,end; /迷宫的入口和出口 bool FindPath(); /主要函数,寻找出口路径 list mazeway; /存放出口路径的临时链表 voi

4、d RandMap(); /随机生成迷宫地图函数 bool CreateMap(bool init); /在初始和找到出口路径后生成相应地图函数 bool pass(MazePos curpos); /当前路径通道块是否可通(即是不是未经过的空块) MazePos NextPos(MazePos curpos,int di); /取得当前通道块当前方向上的下一个通道块 bool Invalide(SElemType e); /使当前通道块标记为不可通 void DisplayMaze(); /显示迷宫地图Maze:Maze(int width,int height) / /随机生成迷宫地图 C

5、reateMap(true); /显示地图 DisplayMaze();Maze() /Add codes herebool Maze:FindPath () /寻找出口,并生成出口路径链表 if(InitOK) /MazeStack mstack; stackSElemType,list mstack; MazePos curpos=start; int curstep=1; /经过的步数 MazeWay mw; /出口路径块元素 unsigned mwsize=mazeway.size (); /为显示运行过程而设 do if(pass(curpos) /如果当前位置可通(即是未走过的空块

6、) /封装栈元素,将当前位置进栈 SElemType e; e.ord =curstep; e.seat =curpos; e.di =1; mstack.push (e); /保存当前位置到出口路径链表 mw.wx =e.seat .wx ; mw.ly =e.seat .ly ; mazeway.push_back (mw); /如果是出口,则结束 if(curpos=end) return true; /不然就将得到下一个通道块 curpos=NextPos(curpos,e.di ); curstep+; else /当前位置不可通,则在栈内找到下一个位置 if(!mstack.emp

7、ty() e=mstack.top (); mstack.pop (); /调整出口路径链表 mazeway.pop_back (); while(e.di=0 | e.di =4) & !mstack.empty () Invalide(e); /标记刻通道块不能通过 /退回一步 if(mstack.empty () return false; else if( e.di5) e.di+; e.di=e.di%5; curpos=NextPos(e.seat ,e.di ); /*/显示运行过程 if(mwsize!=mazeway.size () ) CreateMap(false); m

8、wsize=mazeway.size (); Sleep(800); /要包含windows.h头文件 /* while(!mstack.empty ();MazePos Maze:NextPos(MazePos curpos,int di) MazePos pos; switch(di) case 1: pos=map.mazemap curpos.wx+1curpos.ly ; break; case 2: pos=map.mazemap curpos.wxcurpos.ly+1 ; case 3: pos=map.mazemap curpos.wx-1curpos.ly ; case 4

9、: pos=map.mazemap curpos.wxcurpos.ly-1 ; return pos;pass(MazePos curpos) /通过MazePos类型参数传递的信息检查MazeMap map; if(curpos.wx =MAPWIDTH | curpos.ly =MAPHEIGHT) return (map.mazemap curpos.wx curpos.ly .path =0 & map.mazemap curpos.wx curpos.ly .pass =false );void Maze:DoMaze ()InitOK) return; if(FindPath()

10、 coutendlNO PATH!endl;RandMap () /只能生成从左上到右下的迷宫地图 MazeWay curway; /随机生成的当前正处理的出口路径块(组成mw) mw; /随机生成的出口路径(由curway组成)iterator iter; /容器适配器 curway.wx =0; curway.ly =1; mw.push_back (curway); curway.wx +; srand(time(0); /取得当前时间作为随机数种子 while(curway.wx MAPWIDTH-1 & curway.ly MAPHEIGHT-1) if(rand()%2=1) /生

11、成随机X坐标上的路径块 /生成随机Y坐标上的路径块 curway.ly +; for(int y=0;yMAPHEIGHT;y+) for(int x=0;x=6) /数值越小,墙壁越多 /随机生成墙壁 map.mazemap xy.path =0; /生成空的通道块 /map.mazemap xy.pass =false; /生成出口路径 for(iter=mw.begin ();iter!=mw.end ();iter+) map.mazemap (*iter).wx (*iter).ly .path =0; /map.mazemap (*iter).wx (*iter).ly .pass

12、 =false; /生成入口和出口 start=map.mazemap mw.front ().wxmw.front ().ly; end=map.mazemap mw.back ().wxmw.back ().ly; /初始化成功 InitOK=true;CreateMap (bool init) if(init) RandMap(); if(map.mazemap xy.path =0) map.mazemap xy.pass =0; for(iter=mazeway.begin ();=mazeway.end (); map.mazemap (*iter).wx(*iter).ly .p

13、ath =1;Invalide (SElemType e) /通过SElemType类型参数传递的信息修正MazeMap map; if(e.seat .wx=MAPWIDTH | e.seat .ly map.mazemap e.seat .wxe.seat .ly .pass =true;DisplayMaze () switch (map.mazemap xy.path) case -1:;break; /墙壁图案 case 0: /空块图案= /出口路径图案/main-/主函数,迷宫求解演示int main(int argc, char* argv)下面是随机生成的迷宫: Maze mymaze; /生成迷宫按任意键演示迷宫解法! system(pause); mymaze.DoMaze ();演示结束. return 0;

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2