该迷宫可以自己变幻大小和方块顺序,其中1代表迷宫的墙,0代表迷宫的通道
#include <iostream>
using namespace std;
const int Length=4,Width=4;
int puzzle[Length+2][Width+2]=
{
{1,1,1,1,1,1},
{1,0,0,0,1,1},
{1,0,1,0,0,1},
{1,0,0,0,1,1},
{1,1,0,0,0,1},
{1,1,1,1,1,1}
};
typedef struct
{
int i;//当前的方块的行号
int j;//当前方块的列号
int di;//下一个可走的相邻的方块的方位号
}Box;//定义方块类型
typedef struct
{
Box data[100];
int top;//栈顶指针
}StType;//定义顺序栈类型
int main()
{
void Mg_Solve(int xb,int yb,int xe,int ye );
Mg_Solve(1,1,Length,Width);
return 0;
}
void Mg_Solve(int xb,int yb,int xe,int ye )//从(xb,yb)到(xe,ye)
{
StType st;//定义栈
st.top=-1;//栈顶指针初始化
st.top++;//初始方块进栈
st.data[st.top].i=xb;
st.data[st.top].j=yb;
st.data[st.top].di=-1;
puzzle[xb][yb]=-1;
while(st.top>-1)//栈不为空时循环
{
int i=st.data[st.top].i; int j=st.data[st.top].j;
int di=st.data[st.top].di;//取栈顶方块
if(i==xe&&j==ye)//找到了出口输出路径
{
cout<<"通过迷宫的路径如下"<<endl;
for(int k=0;k<=st.top;k++)
{
cout<<"("<<st.data[k].i<<","<<st.data[k].j<<")";
if((k+1)%4==0)
{
cout<<endl;
}
}
cout<<endl;
}
int find=0;
while(di<4&&find==0)
{
di++;
switch(di)
{
case 0:i=st.data[st.top].i-1;j=st.data[st.top].j;break;
case 1:i=st.data[st.top].i;j=st.data[st.top].j+1;break;
case 2:i=st.data[st.top].i+1;j=st.data[st.top].j;break;
case 3:i=st.data[st.top].i;j=st.data[st.top].j-1;break;
}
if(puzzle[i][j]==0)
{
find=1;
}
}
if(find==1)
{
st.data[st.top].di=di;
st.top++;
st.data[st.top].i=i;
st.data[st.top].j=j;
st.data[st.top].di=-1;
puzzle[i][j]=-1;
}
else
{
puzzle[st.data[st.top].i][st.data[st.top].j]=0;
st.top--;
}
}
cout<<"已经全部搜索可行路径"<<endl;
}