#include<stdio.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define ERROR 0
#define OK 1
typedef struct QElemType
{
int x,y;
struct QElemType *parent; //用于寻找上一节点
}
QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
}
QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}
LinkQueue;
void InitQueue(LinkQueue *Q)
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
Q->front=Q->rear=NULL;
}
void EnQueue(LinkQueue *Q,QElemType e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
QElemType DeQueue(LinkQueue *Q)
{
QElemType e;
QueuePtr p;
p=Q->front->next;
e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
return (e);
}
int QueueEmpty(LinkQueue *Q)
{
if(Q->front==Q->rear )
return 1;
else
return 0;
}
QElemType NextPos(QElemType e,int i)
{
switch(i)
{
case 1:e.y=e.y+1;break;
case 2:e.x=e.x+1;break;
case 3:e.y=e.y-1;break;
case 4:e.x=e.x-1;break;
}
return (e);
}
QElemType MazePath(int maze[][10],LinkQueue Q)
{
int i;
QElemType e,p;
InitQueue(&Q);
e.x=1;e.y=1;
e.parent=NULL;
EnQueue(&Q,e);
while(!QueueEmpty(&Q))
{
e=DeQueue(&Q);
if(e.x==8&&e.y==8)
return e;
for(i=1;i<=4;i++)
{
p=NextPos(e,i);
if(maze[p.x][p.y]==1)
{
maze[p.x][p.y]=2;
p.parent=&e;
EnQueue(&Q,p);
}
}
}
printf("zhao bu dao");
}
void main()
{
LinkQueue Q;QElemType e,*p;int i,j;
int maze[10][10]=
{{0,0,0,0,0,0,0,0,0,0},
{0,1,1,0,1,1,1,0,1,0},
{0,1,1,0,1,1,1,0,1,0},
{0,1,1,1,1,0,0,1,1,0},
{0,1,0,0,0,1,1,1,1,0},
{0,1,1,1,0,1,1,1,1,0},
{0,1,0,1,1,1,0,1,1,0},
{0,1,0,0,0,1,0,0,1,0},
{0,0,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0,0}
};
InitQueue(&Q);
for (i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%d,",maze[i][j]);
}
printf("\n");
}
printf("\n");
e=MazePath(maze,Q);
p=&e;
while(p)
{
printf("(%d,%d),",p->x,p->y);
p=p->parent;
}
getch();
}
麻烦帮我看下,就是无法通过出口往回找,不知道那里哪错了,麻烦帮我看下。
是应用队列,相当于求广度优先遍历,找到出口,再往回寻入口,麻烦各位高手帮我看下。 都把全部分数拿出来了啊!!帮帮忙。
怎么没人回答啊???????