⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mazesss.cpp

📁 很好的实现了功能
💻 CPP
字号:
#include<iostream>
using namespace std;

//迷宫结构体

struct path{
	int x;
	int y;
	int d;
	path *next;
};

int dr[4][2]={{0,1},{1,0},{0,-1},{-1,0}};          //记录方向
path *base=NULL;                                   //栈顶

void main()
{
	 cout<<"欢迎使用迷宫函数!!"<<endl<<endl;
     int i,n,j,k=1,x,y,c=1,m,s,x1,y1;
	 while(c==1){
	   cout<<"请输入维数";
	   cin>>n;	
	   int **a=new int *[n];                           //建立动态二维数组
       for(i=0;i<n;i++)                               //初始化迷宫
         a[i]=new int [n];
	   for(i=0;i<n;i++)
		 for(j=0;j<n;j++){
			 a[i][j]=1;
		 }
	   for(i=0;i<n;i++){                               //建立迷宫的墙壁
		 a[i][0]=0;
		 a[i][n-1]=0;
	   }
	   for(j=0;j<n;j++){
		 a[0][j]=0;
		 a[n-1][j]=0;
	   }
	   for(i=0;i<n;i++){
		 for(j=0;j<n;j++){
			 cout<<a[i][j]<<" ";
		 }
		 cout<<endl;
	   }
	   while(k){                                     //确定障碍物
	    cout<<" 障碍的位置(x,y)";
		cin>>x>>y;
		a[x][y]=0;
		cout<<"还有障碍么?(有=1;没有=0)";
		cin>>k;
	   }
	   cout<<"你输入的迷宫是:"<<endl;
	   for(i=0;i<n;i++){
		 for(j=0;j<n;j++){
			 cout<<a[i][j]<<" ";
		 }
		 cout<<endl;
	   }


	  //迷宫算法


	   path *p,*is,*q;
       is=base;
	   p=new path;
	   p->x=1;
	   p->y=1;
	   p->d=0;
	   p->next=is;
	   is=p;
	   i=1;
	   j=1;
	   a[1][1]=2;
       while(i!=(n-2)||j!=(n-2)){
	       k=0;
	       m=dr[k+0][0];
	       s=dr[k+0][1];
		   while((a[i+m][j+s]!=1)&&k<4){
			   k++;
		       m=dr[k+0][0];
	           s=dr[k+0][1];
		   }
           if(a[i+m][j+s]==1&&k<4){
		   i=i+m;
		   j=j+s;
           p=new path;
           p->x=i;
		   p->y=j;
		   p->d=k;
		   a[p->x][p->y]=2;
		   p->next=is;
		   is=p;
		   }
		   else {
			   while(a[i+m][j+s]==0||a[i+m][j+s]==2){
			       q=is;
			       is=is->next;
			       delete(q);
			       k=is->d;
	               m=dr[k+0][0];
	               s=dr[k+0][1];
		           while((a[(is->x)+m][(is->y)+s]==2||a[(is->x)+m][(is->y)+s]==0)&&k<4){
			          k++;
		              m=dr[k+0][0];
	                  s=dr[k+0][1];
					  i=is->x;
					  j=is->y;
				   }
			   }
			   if(a[i+m][j+s]==1&&k<4){
				   i=i+m;
		           j=j+s;
                   p=new path;
                   p->x=i;
		           p->y=j;
		           p->d=k;
		           a[p->x][p->y]=2;
		           p->next=is;
		           is=p;
			   }
		   }		   
	   }
	 
	 //输出结果

	   if(is==base) cout<<"error";       //判断栈不为空
	   else{                             //进行删除并且输出操作
		 while(is!=base){
		   p=is;
		   is=is->next;
		   cout<<"("<<p->x<<","<<p->y<<")";
		   delete(p);
		 }
	   }
	   cout<<"是否继续?(继续=1,否=0)";
	   cin>>c;
	 }
	 cout<<"谢谢使用!";
//	 system("pause");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -