資源簡介
用棧輔助實現(xiàn)迷宮問題的求解,通過隨機數(shù)發(fā)生器產(chǎn)生迷宮圖,程序顯示求解步驟
代碼片段和文件信息
#include?
#include?
#include?//因為要產(chǎn)生隨機函數(shù)種子
#include?//因為要用Sleep延時函數(shù)
#define?MAX_X?20??//定義迷宮大小
#define?MAX_Y?20
int?maze[MAX_X][MAX_Y];
class?stack_for_maze//迷宮行走路線存儲專用棧類!
{
private:
?struct?node//結(jié)點用來記錄壓棧的迷宮坐標(biāo)
?{
??int?x;
??int?y;
??char?direction;?//上一步的行走方向(即如何來到這里的)???→?←?↑?↓
??node*?next;
?};
?node*?head;
public:
?stack_for_maze()//構(gòu)造函數(shù)
?{
??head=NULL;
?}
?~stack_for_maze()//析構(gòu)函數(shù)
?{
??node*?p=head;
??while(head!=NULL)
??{
???head=head->next;
???delete?p;
???p=head;
??}
?}
?//________________________________________
?void?push(int?xxint?yychar?ddirection)//壓棧,將坐標(biāo)和行走方向壓棧
?{
??node*?new_node;
??new_node=new?node;
??if(new_node!=NULL)
??{
???new_node->x=xx;
???new_node->y=yy;
???new_node->direction=ddirection;
???new_node->next=NULL;
???
???if(head==NULL)
????head=new_node;
???else
???{
????new_node->next=head;
????head=new_node;
???}??
??}
??else
???cout<<“\n因為內(nèi)存分配失敗導(dǎo)致本次壓棧失敗!!!\n“;
?}
?//________________________________________
?node*?pop(int&?xxint&?yy)//出棧時帶回棧頂元素坐標(biāo)
?{
??if(head!=NULL)
??{
???node*?p=head;
???head=head->next;
???xx=p->x;
???yy=p->y;
???delete?p;
??}
??else
??{
???cout<<“\n因為棧已空導(dǎo)致本次出棧失敗\n“;
??}
??return?head;
?}
?//________________________________________
?void?print()//輸出棧內(nèi)元素
?{
??if(head!=NULL)
??{
???node*?p=head;
???while(p!=NULL)
???{
????cout<<“??“<x<<“???“<y<<“???“<direction< ????p=p->next;
???}
??}
??else
???cout<<“\n棧為空,打印失敗\n“;
?}
};
//_______________________________________________________
void?CreateMaze()//創(chuàng)建迷宮
{
?int?max_way=MAX_X*MAX_Y;//產(chǎn)生通路的參數(shù),值越大障礙越少
?int?xy;
?for(x=0;x ??for(y=0;y ???maze[x][y]=1;?//先把迷宮全部設(shè)為墻壁
?srand((unsigned)time(NULL));//隨機函數(shù)種子發(fā)生器(以時間做參數(shù))
?for(int?i=0;i<=max_way;i++)//隨機構(gòu)建迷宮通路
?{??
??x=rand()%(MAX_X-2)+1;
??y=rand()%(MAX_Y-2)+1;
??maze[x][y]=0;
?}
?
?maze[1][1]=0;//入口
?maze[MAX_X-2][MAX_Y-2]=0;//出口
?maze[0][1]=8;
?maze[MAX_X-1][MAX_Y-2]=0;
}
//_________________________________________________________
void?PrintMaze()//輸出迷宮的當(dāng)前狀態(tài)
{
?int?xy;
?system(“cls“);//清屏
?cout< ?for(x=0;x ?{
??for(y=0;y ??{
???if(maze[x][y]==0){cout<<“??“;continue;}//通路
???if(maze[x][y]==1){cout<<“■“;continue;}//墻
???if(maze[x][y]==2){cout<<“ד;continue;}//死胡同
???if(maze[x][
評論
共有 條評論