📄 mazesss.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 + -