迷宫问题里不能输出通路!程序比较长,希望指导一下!!!
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct{
int x,y,d;}DataType;
typedef struct{
int x,y;
}item;
typedef struct node{
DataType data;
struct node *next;
}StackNode,*PStackNode;
typedef struct{
PStackNode top;
}LinkStack,*PLinkStack;
PLinkStack Init_LinkStack(void)
{ PLinkStack S;
S=(PLinkStack)malloc(sizeof(LinkStack));
if(S) S->top=NULL;
return(S);
}
int Empty_LinkStack(PLinkStack S)
{ return(S->top==NULL);}
int Push_LinkStack(PLinkStack S,DataType x)
{ PStackNode p;
p=(PStackNode)malloc(sizeof(StackNode));
if(!p)
{
printf("内存溢出");
return(0);
}
p->data=x;
p->next=S->top;
S->top=p;
return(1);
}
int Pop_LinkStack(PLinkStack S,DataType *x)
{PStackNode p;
if(Empty_LinkStack(S))
{
printf("栈空 不能出栈");
return(0);
}
*x=S->top->data;
p=S->top;
S->top=S->top->next;
free(p);
return(1);
}
void Destroy_LinkStack(PLinkStack *LS)
{PStackNode p,q;
if(*LS)
{
p=(*LS) ->top;
while(p)
{
q=p;
p=p->next;
free(q);
}
free(*LS) ;
}
*LS=NULL;
return;
}
void mg(int a[10][10], int m, int n) //创建迷宫并在四周设障碍
{
int i, j;
for (i = 0, j = 0; i < m + 2; i++)
a[i][j] = 1;
for (i = 0, j = n + 1; i < m + 2; i++)
a[i][j] = 1;
for (j = 0, i = 0; j < n + 2; j++)
a[i][j] = 1;
for (j = 0, i = m + 1; j < n + 1; j++)
a[i][j] = 1;
printf("Give me the map\n");
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++)
scanf("%d", &a[i][j]);
}
void print(int a[10][10], int m, int n) //打印迷宫
{
int i, j;
for (i = 0; i <= m + 1; i++) {
for (j = 0; j <= n + 1; j++) {
printf("%5d", a[i][j]);
}
printf("\n");
}
}
int mazepath(int maze[10][10],item *move,int x0,int y0,int m,int n)
{/*求迷宫路径,入口参数:指向迷宫数组的指针,指向移动方向的指针,开始点(x0,y0),到达点(m,n),返回值:1表示求出路径,0表示无路径*/
PLinkStack S;
DataType temp;
int x,y,d,i,j;
temp.x=x0;temp.y=y0;temp.d=-1;
S= Init_LinkStack();/*初始化栈*/
if(!S)
{
printf("栈初始化失败");
return(0);
}
Push_LinkStack(S,temp);/*迷宫入点口入栈*/
while(!Empty_LinkStack(S))
{
Pop_LinkStack(S,&temp);
x=temp.x;y=temp.y;d=temp.d+1;maze[x][y]=0;
while(d<4)/*存在剩余方向可以搜索*/
{
i=x+move[d].x;j=y+move[d].y;
if(maze[i][j]==0)/*此方向可走*/
{temp.x=x;
temp.y=y;
temp.d=d;
Push_LinkStack(S,temp);/*点{x,y}可以走,用栈保存可以走的路径*/
x=i;y=j;maze[x][y]=-1;
if(x==m &&y==n)/*迷宫有路*/
{ while(!Empty_LinkStack(S))
{ Pop_LinkStack(S,&temp);
printf("(%d,%d)<-",temp.x,temp.y);/*打印可走的路径*/
}
Destroy_LinkStack(&S);/*销毁栈*/
return 1;
}
else d=0;/*方向复位,从第一个方向开始试探*/
}
else d++;/*试探下一个方向*/
}
}
Destroy_LinkStack(&S);
return 0;
}
void main()
{
int r, c;
item move[4];
int maze[10][10];
int x0=1;
int y0=1;
printf("Give me r & c\n");
scanf("%d,%d", &r, &c);
mg(maze, r, c);
printf("It's like this\n");
print(maze, r, c);
printf("the mazepath is:\n");
mazepath(maze,move,x0,y0,r,c);
}








好长

