迷宫源代码.docx
- 文档编号:4690041
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:13
- 大小:17.32KB
迷宫源代码.docx
《迷宫源代码.docx》由会员分享,可在线阅读,更多相关《迷宫源代码.docx(13页珍藏版)》请在冰豆网上搜索。
迷宫源代码
ÃÔ¹¬Ô´´úÂë.txtͬ־ÃÇ£º±ð³´¹É£¬·çÏÕÌ«´óÁË£¬»¹ÊÇ×ö¶¹¸¯×ȫ£¡×öÓ²ÁËÊǶ¹¸¯¸É£¬×öÏ¡ÁËÊǶ¹¸¯ÄÔ£¬×ö±¡ÁËÊǶ¹¸¯Æ¤£¬×öûÁËÊǶ¹½¬£¬·Å³ôÁËÊdzô¶¹¸¯£¡ÎÈ׬²»¿÷ѽ£¡#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
//class:
MazePos-----------------------------------------
//ÃÔ¹¬Í¨µÀ¿éÀàÐÍ
classMazePos
{
public:
intwx,ly;//¿éµÄX,Y×ø±ê
intpath;//¿éµÄÀàÐÍ;0:
¿Õ¿é,-1:
ǽ±Ú,1:
³ö¿Ú·¾¶
boolpass;//ÊÇ·ñÔø¾¹ý(¶Ôǽ±ÚÎÞÒâÒå);false:
ûÓÐ,true:
Ôø¾¹ý
booloperator==(constMazePospos)
{
return(wx==pos.wx&&ly==pos.ly);
};
MazePosoperator=(constMazePospos)
{
wx=pos.wx;
ly=pos.ly;
pass=pos.pass;
path=pos.path;
return*this;
};
};
//End:
MazePos---------------------------------------
//class:
SElemType-----------------------------------------
//¸¨ÖúÕ»ÔªËØÀàÐÍ
classSElemType
{
public:
intord;//ÃÔ¹¬Í¨µÀ¿é·¾¶ÉϵÄÐòºÅ
MazePosseat;//ͨµÀ¿éÔÚÃÔ¹¬ÖеÄλÖÃ×ø±ê
intdi;//´Ó´ËͨµÀ¿é×ßÏòÏÂһͨµÀ¿éµÄ·½Ïò
//0:
ÎÞЧ,1:
¶«,2:
ÄÏ,3:
Î÷,4:
±±
booloperator==(constSElemTypeet)
{
return(seat==et.seat);
};
SElemTypeoperator=(constSElemTypeet)
{
ord=et.ord;
seat=et.seat;
di=et.di;
return(*this);
};
};
//End:
SElemType--------------------------------------
//struct:
MazeMap-------------------------------------
//ÓÉͨµÀ¿é×é³ÉµÄÃÔ¹¬µØͼ
#defineMAPWIDTH10
#defineMAPHEIGHT10
typedefstructMazeMap
{
//ÓÉͨµÀ¿é¾ØÕó¹¹³É
MazePosmazemap[MAPWIDTH][MAPHEIGHT];
}MazeMap;
//End:
MazeMap---------------------------------------
//struct:
:
MazeWay----------------------------------------
//¸¨Öú³ö¿Ú·¾¶Á´±íÔªËØÀàÐÍ
typedefstructMazeWay
{
intwx,ly;
}MazeWay;
//End:
MazeWay--------------------------------------------
//Class:
Maze----------------------------------------
//Ö÷ÌåÀà,ÃÔ¹¬Â·¾¶ÎÊÌâÇó½â
classMaze
{
public:
Maze(intwidth=MAPWIDTH,intheight=MAPHEIGHT);//Éú³ÉÃÔ¹¬µØͼ
~Maze();
voidDoMaze();//ÕÒ³ö³ö¿Ú·¾¶²¢ÏÔʾ
private:
boolInitOK;//³õʼ»¯³É¹¦±êÖ¾
MazeMapmap;//ÃÔ¹¬µØͼ
MazePosstart,end;//ÃÔ¹¬µÄÈë¿ÚºÍ³ö¿Ú
boolFindPath();//Ö÷Òªº¯Êý,Ñ°ÕÒ³ö¿Ú·¾¶
list
voidRandMap();//Ëæ»úÉú³ÉÃÔ¹¬µØͼº¯Êý
boolCreateMap(boolinit);//ÔÚ³õʼºÍÕÒµ½³ö¿Ú·¾¶ºóÉú³ÉÏàÓ¦µØͼº¯Êý
boolpass(MazePoscurpos);//µ±Ç°Â·¾¶Í¨µÀ¿éÊÇ·ñ¿Éͨ(¼´ÊDz»ÊÇδ¾¹ýµÄ¿Õ¿é)
MazePosNextPos(MazePoscurpos,intdi);//È¡µÃµ±Ç°Í¨µÀ¿éµ±Ç°·½ÏòÉϵÄÏÂÒ»¸öͨµÀ¿é
boolInvalide(SElemTypee);//ʹµ±Ç°Í¨µÀ¿é±ê¼ÇΪ²»¿Éͨ
voidDisplayMaze();//ÏÔʾÃÔ¹¬µØͼ
};
Maze:
:
Maze(intwidth,intheight)
{
//
//Ëæ»úÉú³ÉÃÔ¹¬µØͼ
CreateMap(true);
//ÏÔʾµØͼ
DisplayMaze();
}
Maze:
:
~Maze()
{
//Addcodeshere
}
boolMaze:
:
FindPath()
{
//
//Ñ°ÕÒ³ö¿Ú,²¢Éú³É³ö¿Ú·¾¶Á´±í
if(InitOK)
{
//MazeStackmstack;
stack
MazePoscurpos=start;
intcurstep=1;//¾¹ýµÄ²½Êý
MazeWaymw;//³ö¿Ú·¾¶¿éÔªËØ
unsignedmwsize=mazeway.size();//ΪÏÔʾÔËÐйý³Ì¶øÉè
do
{
if(pass(curpos))
{
//Èç¹ûµ±Ç°Î»ÖÿÉͨ(¼´ÊÇδ×ß¹ýµÄ¿Õ¿é)
//·â×°Õ»ÔªËØ,½«µ±Ç°Î»ÖýøÕ»
SElemTypee;
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);
//Èç¹ûÊdzö¿Ú,Ôò½áÊø
if(curpos==end)
returntrue;
//²»È»¾Í½«µÃµ½ÏÂÒ»¸öͨµÀ¿é
curpos=NextPos(curpos,e.di);
curstep++;
}
else
{
//µ±Ç°Î»Öò»¿Éͨ,ÔòÔÚÕ»ÄÚÕÒµ½ÏÂÒ»¸öλÖÃ
if(!
mstack.empty())
{
SElemTypee;
e=mstack.top();
mstack.pop();
//µ÷Õû³ö¿Ú·¾¶Á´±í
mazeway.pop_back();
while((e.di==0||e.di==4)&&!
mstack.empty())
{
Invalide(e);//±ê¼Ç¿ÌͨµÀ¿é²»ÄÜͨ¹ý
e=mstack.top();
mstack.pop();//ÍË»ØÒ»²½
//µ÷Õû³ö¿Ú·¾¶Á´±í
mazeway.pop_back();
}
if(mstack.empty())
returnfalse;
elseif(e.di<5)
{
e.di++;
e.di=e.di%5;
mstack.push(e);
//±£´æµ±Ç°Î»Öõ½³ö¿Ú·¾¶Á´±í
mw.wx=e.seat.wx;
mw.ly=e.seat.ly;
mazeway.push_back(mw);
curpos=NextPos(e.seat,e.di);
}
}
}
///*//ÏÔʾÔËÐйý³Ì
if(mwsize!
=mazeway.size())
{
CreateMap(false);
DisplayMaze();
mwsize=mazeway.size();
Sleep(800);//Òª°üº¬windows.hÍ·Îļþ
}
//*
}while(!
mstack.empty());
}
returnfalse;
}
MazePosMaze:
:
NextPos(MazePoscurpos,intdi)
{
//
MazePospos;
switch(di)
{
case1:
pos=map.mazemap[curpos.wx+1][curpos.ly];
break;
case2:
pos=map.mazemap[curpos.wx][curpos.ly+1];
break;
case3:
pos=map.mazemap[curpos.wx-1][curpos.ly];
break;
case4:
pos=map.mazemap[curpos.wx][curpos.ly-1];
break;
}
returnpos;
}
boolMaze:
:
pass(MazePoscurpos)
{
//
//ͨ¹ýMazePosÀàÐͲÎÊý´«µÝµÄÐÅÏ¢¼ì²éMazeMapmap;
if(curpos.wx<0||
curpos.wx>=MAPWIDTH||
curpos.ly<0||
curpos.ly>=MAPHEIGHT)
returnfalse;
return(map.mazemap[curpos.wx][curpos.ly].path==0&&
map.mazemap[curpos.wx][curpos.ly].pass==false);
}
voidMaze:
:
DoMaze()
{
//
if(!
InitOK)
return;
if(FindPath())
{
CreateMap(false);
DisplayMaze();
}
else
{
cout< "< } } voidMaze: : RandMap() { // //Ö»ÄÜÉú³É´Ó×óÉϵ½ÓÒϵÄÃÔ¹¬µØͼ MazeWaycurway;//Ëæ»úÉú³ÉµÄµ±Ç°Õý´¦ÀíµÄ³ö¿Ú·¾¶¿é(×é³Émw) list list : iteratoriter;//ÈÝÆ÷ÊÊÅäÆ÷ curway.wx=0; curway.ly=1; mw.push_back(curway); curway.wx++; mw.push_back(curway); srand(time(0));//È¡µÃµ±Ç°Ê±¼ä×÷ΪËæ»úÊýÖÖ×Ó while(curway.wx { if(rand()%2==1) { //Éú³ÉËæ»úX×ø±êÉϵÄ·¾¶¿é curway.wx++; mw.push_back(curway); } else { //Éú³ÉËæ»úY×ø±êÉϵÄ·¾¶¿é curway.ly++; mw.push_back(curway); } } srand(time(0)); for(inty=0;y { for(intx=0;x { //Ìî³äÿ¸öͨµÀ¿é map.mazemap[x][y].wx=x; map.mazemap[x][y].ly=y; map.mazemap[x][y].pass=false; if(x==0||y==0||x==MAPWIDTH-1||y==MAPHEIGHT-1) { //Éú³ÉËÄÖÜǽ±Ú map.mazemap[x][y].path=-1; //map.mazemap[x][y].pass=true; } else { if(rand()%10>=6)//ÊýֵԽС,ǽ±ÚÔ½¶à { map.mazemap[x][y].path=-1;//Ëæ»úÉú³Éǽ±Ú //map.mazemap[x][y].pass=true; } else { map.mazemap[x][y].path=0;//Éú³É¿ÕµÄͨµÀ¿é //map.mazemap[x][y].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=false; } //Éú³ÉÈë¿ÚºÍ³ö¿Ú start=map.mazemap[mw.front().wx][mw.front().ly]; end=map.mazemap[mw.back().wx][mw.back().ly]; //³õʼ»¯³É¹¦ InitOK=true; } boolMaze: : CreateMap(boolinit) { // if(init) { RandMap(); } else { for(inty=0;y for(intx=0;x { if(map.mazemap[x][y].path==0) map.mazemap[x][y].pass=0; } list : iteratoriter; for(iter=mazeway.begin();iter! =mazeway.end();iter++) { map.mazemap[(*iter).wx][(*iter).ly].path=1; } } returntrue; } boolMaze: : Invalide(SElemTypee) { // //ͨ¹ýSElemTypeÀàÐͲÎÊý´«µÝµÄÐÅÏ¢ÐÞÕýMazeMapmap; if(e.seat.wx<0|| e.seat.wx>=MAPWIDTH|| e.seat.ly<0|| e.seat.ly>=MAPHEIGHT) returnfalse; map.mazemap[e.seat.wx][e.seat.ly].pass=true; returntrue; } voidMaze: : DisplayMaze() { // cout< for(inty=0;y { for(intx=0;x { switch(map.mazemap[x][y].path) { case-1: cout<<"¨€";break;//ǽ±Úͼ°¸ case0: cout<<"";break;//¿Õ¿éͼ°¸ case1: cout<<"==";break;//³ö¿Ú·¾¶Í¼°¸ } } cout< } cout< } //End: Maze---------------------------------------- //main-------------------------------------------- //Ö÷º¯Êý,ÃÔ¹¬Çó½âÑÝʾ intmain(intargc,char*argv[]) { // cout<<"ÏÂÃæÊÇËæ»úÉú³ÉµÄÃÔ¹¬: "< Mazemymaze;//Éú³ÉÃÔ¹¬ cout<<"°´ÈÎÒâ¼üÑÝʾÃÔ¹¬½â·¨! "< system("pause"); mymaze.DoMaze();//Éú³É³ö¿Ú·¾¶ cout<<"ÑÝʾ½áÊø."< system("pause"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迷宫 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)