入栈方式求解迷宫源代码(C++版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include"stdio.h"
struct postype{
int x;
int y;
};
struct map{
postype seat;
int di;
};
struct mapstack{
map *mappath;
int ord;
};
int initstack(mapstack &s){
s.mappath=new map[100];
s.ord=0;
return 1;
}
int Pushpath(mapstack &s,map e){
++s.ord;
s.mappath[s.ord]=e;
return 1;
}
int Poppath(mapstack& s)
{
--s.ord;
return 1;
}
bool Pass(mapstack& s,int a,int b)
{
for(int j=0;j<=s.ord;++j)
{
if(s.mappath[j].seat.x==a&&s.mappath[j].seat.y==b)
{
return false;
}
}
return true;
}
void explore(mapstack& s,int a[10][10]){
if(s.mappath[s.ord].di==1)
{
if((s.mappath[s.ord].seat.x-1)>=0)
{
if(a[s.mappath[s.ord].seat.x-1][s.mappath[s.ord].seat.y]==0&&Pass(s,s.mappath[s.ord].seat.x-1,s.mappath[s.ord].seat.y))
{
map temp;
temp.seat.x=s.mappath[s.ord].seat.x-1;
temp.seat.y=s.mappath[s.ord].seat.y;
temp.di=1;
s.mappath[s.ord].di=2;
Pushpath(s,temp);
}
else
{
s.mappath[s.ord].di=2;
}
}
}
if(s.mappath[s.ord].di==2)
{
if((s.mappath[s.ord].seat.y+1)<=9)
{
if(a[s.mappath[s.ord].seat.x][s.mappath[s.ord].seat.y+1]==0&&Pass(s,s.mappath[s.ord].seat.x,s.mappath[s.ord].seat.y+1))
{
map temp;
temp.seat.x=s.mappath[s.ord].seat.x;
temp.seat.y=s.mappath[s.ord].seat.y+1;
temp.di=1;
s.mappath[s.ord].di=3;
Pushpath(s,temp);
}
else
{
s.mappath[s.ord].di=3;
}
}
}
if(s.mappath[s.ord].di==3)
{
if((s.mappath[s.ord].seat.x+1)<=9)
{
if(a[s.mappath[s.ord].seat.x+1][s.mappath[s.ord].seat.y]==0&&Pass(s,s.mappath[s.ord].seat.x+1,s.mappath[s.ord].seat.y))
{
map temp;
temp.seat.x=s.mappath[s.ord].seat.x+1;
temp.seat.y=s.mappath[s.ord].seat.y;
temp.di=1;
s.mappath[s.ord].di=4;
Pushpath(s,temp);
}
else
{
s.mappath[s.ord].di=4;
}
}
}
if(s.mappath[s.ord].di==4)
{
if((s.mappath[s.ord].seat.y-1)>=0)
{
if(a[s.mappath[s.ord].seat.x][s.mappath[s.ord].seat.y-1]==0&&Pass(s,s.mappath[s.ord].seat.x,s.mappath[s.ord].seat.y-1))
{
printf("%d",Pass(s,s.mappath[s.ord].seat.x,s.mappath[s.ord].seat.y-1));
map temp;
temp.seat.x=s.mappath[s.ord].seat.x;
temp.seat.y=s.mappath[s.ord].seat.y-1;
temp.di=1;
Pushpath(s,temp);
}
else
{
Poppath(s);
}
}
}
}
int CreatMap(int map[10][10])
{
for(int k=0;k<=9;++k)
{
for(int n=0;n<=9;++n)
{
map[k][n]=0;
}
}
for(int j=0;j<=9;++j)
{
map[0][j]=1;
map[j][0]=1;
map[9][j]=1;
map[j][9]=1;
}
map[1][8]=1;
map[2][4]=1;
map[2][6]=1;
map[2][7]=1;
map[3][1]=1;
map[3][2]=1;
map[3][4]=1;
map[3][7]=1;
map[4][4]=1;
map[4][5]=1;
map[4][7]=1;
map[5][3]=1;
map[6][3]=1;
map[6][6]=1;
map[6][7]=1;
map[7][1]=1;
map[7][2]=1;
map[7][3]=1;
return 1;
}
bool forend(postype end,mapstack s){
if(s.mappath[s.ord].seat.x==end.x)
{
if(s.mappa
th[s.ord].seat.y==end.y)
{
return false;
}
}
return true;
}
void main()
{
int map[10][10];
CreatMap(map);
mapstack s;
initstack(s);
postype end,start;
end.x=8;
end.y=8;
start.x=1;
start.y=1;
s.mappath[0].seat.x=start.x;
s.mappath[0].seat.y=start.y;
s.mappath[0].di=1;
do
{
explore(s,map);
}while(forend(end,s));
for(int j=0;j<=s.ord;++j)
{
printf("(%d,%d)\n",s.mappath[j].seat.x,s.mappath[j].seat.y);
}
}