电子老鼠走迷宫 分支限界法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#define maxs 13
#define maxsize 100000
int length=0;
int visit[20][20];
char mg[maxs][maxs];
typedef struct queue //huojiedian
{
int rear;
int top;
int base[maxsize][2];//0==x 1==y
} queue;
void enqueue(queue *a,int m,int n) //top wuyuansu {
if((a->top+1)%maxsize!=a->rear)
{
a->base[a->top][0]=m;
a->base[a->top][1]=n;
a->top=(a->top+1)%maxsize;
}
}
void dequeue(queue *a,int *x,int *y)
{
if(a->rear!=a->top)
{
*x=a->base[a->rear][0];
*y=a->base[a->rear][1];
a->rear=(a->rear+1)%maxsize;
}
}
int empty(queue *a)
{
if(a->rear==a->top)
return 0;
return 1;
}
int search(int x,int y,int m,int n,queue *a,char mg[13][13])
{
while(1)
{
if(empty(a))
{
dequeue(a,&x,&y);
if(x==0&&y==0)
{
enqueue(a,0,0);
length++;
dequeue(a,&x,&y);
}
visit[x][y]=1;
if(x==m&&y==n)
return 0;
if(mg[x-1][y]!='X'&&x-1>0&&visit[x-1][y]==0) //UP
enqueue(a,x-1,y);
if(mg[x][y+1]!='X'&&y+1 enqueue(a,x,y+1); if(mg[x][y-1]!='X'&&y-1>0&&visit[x][y-1]==0) //LEFT enqueue(a,x,y-1); if(mg[x+1][y]!='X'&&x+1 } } } int main() { queue a; a.rear=0; a.top=0; int i,j,m,n,x,y; for(i=0; i<20; i++) { for(j=0; j<20; j++) visit[i][j]=0; } scanf("%d%d%d%d",&x,&y,&m,&n); enqueue(&a,x,y); enqueue(&a,0,0); getchar(); for(i=1; i { for(j=1; j { scanf("%c",&mg[i][j]); } getchar(); } search(x,y,m,n,&a,mg); printf("%d\n",length); return 0; }