#include<stdio.h>
#include<stdlib.h>
#define max 5000
int mg[10][10]=
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,1,0,0,0,1,0,1},
{1,0,0,0,0,1,1,0,0,1},
{1,0,1,1,1,0,0,0,0,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,0,0,1,0,0,1},
{1,0,1,1,1,0,1,1,0,1},
{1,1,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1},
};
typedef struct
{
int i,j;
int pre;
}box;
typedef struct
{
box data[max];
int front,rear;
}quenen;
bool mgpath(int xi,int yi);
void print(quenen *q,int front);
void en(quenen *q,box e);
void de(quenen *q,int &e);
int main()
{
mgpath(1,1);
return 0;
}
void print(quenen *q,int front)
{
int k=front,j,ns=0;
while(k!=-1)
{
ns++;
printf("(%d,%d) ",q->data[k].i,q->data[k].j);
k=q->data[k].pre;
if(ns%5==0)
printf("\n");
}
printf("\n");
}
void en(quenen *q,box e)
{
q->rear++;
q->data[q->rear].i=e.i;
q->data[q->rear].j=e.j;
q->data[q->rear].pre=e.pre;
}
void de(quenen *q,box &e)
{
q->front++;
e.i=q->data[q->front].i;
e.j=q->data[q->front].j;
e.pre=q->data[q->front].pre;
}
bool mgpath(int xi,int yi)
{
box e;
int i,j,di,i1,j1;
quenen *q;
q=(quenen *)malloc(sizeof(quenen));
q->rear=q->front=-1;
e.i=xi;
e.j=yi;
e.pre=-1;
en(q,e);
mg[xi][yi]=-1;
while(q->front!=q->rear)
{
de(q,e);
i=e.i;j=e.j;
if(i==8&&j==8)
{
print(q,q->front);
free(q);
return true;
}
for(di=0;di<4;di++)
{
switch(di)
{
case 0:i1=i-1;j1=j; break;
case 1:i1=i; j1=j+1;break;
case 2:i1=i+1;j1=j; break;
case 3:i1=i; j1=j-1;break;
}
if(mg[i1][j1]==0)
{
e.i=i1;
e.j=j1;
e.pre=q->front;
en(q,e);
mg[i1][j1]=-1;
}
}
}
free(q);
return false;
}
迷宫问题 数据结构
猜你喜欢
转载自blog.csdn.net/shenyulingyeye/article/details/81460514
今日推荐
周排行