• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C/C++
  • 标签: 迷宫  

资源简介

用栈辅助实现迷宫问题的求解,通过随机数发生器产生迷宫图,程序显示求解步骤

资源截图

代码片段和文件信息

#include 
#include 
#include //因为要产生随机函数种子
#include //因为要用Sleep延时函数

#define MAX_X 20  //定义迷宫大小
#define MAX_Y 20

int maze[MAX_X][MAX_Y];

class stack_for_maze//迷宫行走路线存储专用栈类!
{
private:
 struct node//结点用来记录压栈的迷宫坐标
 {
  int x;
  int y;
  char direction; //上一步的行走方向(即如何来到这里的)   → ← ↑ ↓
  node* next;
 };
 node* head;
public:
 stack_for_maze()//构造函数
 {
  head=NULL;
 }
 ~stack_for_maze()//析构函数
 {
  node* p=head;
  while(head!=NULL)
  {
   head=head->next;
   delete p;
   p=head;
  }
 }
 //________________________________________
 void push(int xxint yychar ddirection)//压栈,将坐标和行走方向压栈
 {
  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“;
 }
 //________________________________________
 node* pop(int& xxint& yy)//出栈时带回栈顶元素坐标
 {
  if(head!=NULL)
  {
   node* p=head;
   head=head->next;
   xx=p->x;
   yy=p->y;
   delete p;
  }
  else
  {
   cout<<“\n因为栈已空导致本次出栈失败\n“;
  }
  return head;
 }
 //________________________________________
 void print()//输出栈内元素
 {
  if(head!=NULL)
  {
   node* p=head;
   while(p!=NULL)
   {
    cout<<“  “<x<<“   “<y<<“   “<direction<    p=p->next;
   }
  }
  else
   cout<<“\n栈为空,打印失败\n“;
 }
};
//_______________________________________________________
void CreateMaze()//创建迷宫
{
 int max_way=MAX_X*MAX_Y;//产生通路的参数,值越大障碍越少
 int xy;

 for(x=0;x  for(y=0;y   maze[x][y]=1; //先把迷宫全部设为墙壁

 srand((unsigned)time(NULL));//随机函数种子发生器(以时间做参数)
 for(int i=0;i<=max_way;i++)//随机构建迷宫通路
 {  
  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()//输出迷宫的当前状态
{
 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][

评论

共有 条评论