电子老鼠走迷宫 分支限界法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档