java走迷宫穷举_迷宫求解(穷举法)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#include

/*class pose

{

public:

int x;

int y;

int h;

pose(int x,int y,int z)

{

this->x=x;

this->y=y;

this->h=h;

}

};

class type

{

public:

int ord;

pose seat;

int di;

type(int ord,pose curpos,int di)

{

this->ord=ord;

seat=curpos;

this->di=di;

}

};*/

typedef struct

{

int x;

int y;

int h;

}pose;

typedef struct

{int ord;

pose seat;

int di;

}type;

class sqstack

{

public:

type *base;

type *top;

int stacksize;

};

int curstep;

class stack:public sqstack,public type

{

private:

type e;

public:

void initstack(sqstack &s,int n)

{

s.base=new type[n];

if(!s.base)

{

cout<

}

s.top=s.base;

s.stacksize=n;

}

void push(sqstack &s,type e)

{

if(s.top-s.base>=s.stacksize){cout<

*s.top=e;

s.top++;

}

type  pop(sqstack &s)

{

if(s.top == s.base)cout<

s.top--;

e=*s.top;

return e;

}

bool test(pose curpos[],int curstep)

{

if(curstep==1)return false;

else

{

for(int i=curstep-1;i>0;i--)

{

if((curpos[i].x==curpos[curstep].x)&&(curpos[i].y==curpos[curstep].y))

{

return true;break;

}

}

if(i==0)return false;

}

}

bool pass(pose curpos[],int n[][10],int curstep)//pose &curpos,

{

if (curpos[curstep].h==1||n[curpos[curstep].y][curpos[curstep].x]==-2)return false;

else if(test(curpos,curstep))

return false;

//(curpos[7].x==curpos[curstep].x)&&(curpos[7].y==curpos[curstep].y)(curpos[7].x==curpos[curstep].x)&&(curpos[7].y==curpos[curstep].y)

else return true;

}

void  footprint(pose &curpos)

{

curpos.h=1;

}

void  marksprint(pose &curpos)

{

curpos.h=1;

}

void nextpos(pose &curpos1,pose &curpos2,int di)

{

switch (di)

{

case 1:

curpos2.x=curpos1.x+1;curpos2.y=curpos1.y;

break;

case 2:

curpos2.y=curpos1.y+1;curpos2.x=curpos1.x;

break;

case 3:

curpos2.x=curpos1.x-1;curpos2.y=curpos1.y;

break;

case 4:

curpos2.y=curpos1.y-1;curpos2.x=curpos1.x;

break;

default:

cout<

break;

}

}

bool mazepath(int n[10][10],stack m1,sqstack s)//stack m1,

{

//pose curpos;//end;start,

//pose start={1,1,1};pose end(8,8,1);//结构变量的赋值!!!!

pose start={1,1,0};pose end={8,8,1};//结构变量的赋值!!!!

pose *curpos=new pose[100];

for(int i=1;i<100;i++)

{

curpos[i].x=0;

curpos[i].y=0;

curpos[i].h=0;//={0,0,0};

}

curstep=1;

curpos[curstep]=start;

do{

if(m1.pass(curpos,n,curstep))//curpos[curstep],

{

footprint(curpos[curstep]);

type e;

e.di=1;

e.seat=curpos[curstep];

e.ord=curstep;//={curstep,curpos,1};

m1.push(s,e);

if((curpos[curstep].x==end.x)&&(curpos[curstep].y==end.y)) return(true);

curstep++;

m1.nextpos(curpos[curstep-1],curpos[curstep],1);

}

else{

if(!(s.base==s.top))

{

e=pop(s);

while(e.di==4&&!(s.base==s.top))

{

m1.marksprint(e.seat);

e=pop(s);

}

if(e.di<4)

{

e.di++;

m1.push(s,e);

curstep++;

//curpos[curstep].h=1;

m1.nextpos(e.seat,curpos[curstep],e.di);

}

}

}

}while(!(s.base==s.top));

return(false);

};

};

void main()

{

int h;//type n;

sqstack s;

stack m;

cin>>h;

m.initstack(s,h);

//m.initstack(s,h);

cout<

/*for(int i=1;i<=10;i++)

{

cin>>h;

m.push(s,h);

} */

int  n[10][10]=

{{-2,-2,-2,-2,-2,-2,-2,-2,-2,-2},

{-2,0,0,-2,0,0,0,-2,0,-2},

{-2,0,0,-2,0,0,0,-2,0,-2},

{-2,0,0,0,0,-2,-2,0,0,-2},

{-2,0,-2,-2,-2,0,0,0,0,-2},

{-2,0,0,0,-2,0,0,0,0,-2},

{-2,0,-2,0,0,0,-2,0,0,-2},

{-2,0,-2,-2,-2,0,-2,-2,0,-2},

{-2,-2,0,0,0,0,0,0,0,-2},

{-2,-2,-2,-2,-2,-2,-2,-2,-2,-2}};

if(m.mazepath(n,m,s))cout<

else cout<

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值