#includestruct stacknode
{
int x;
int y;
struct stacknode *next;
};
typedef struct stacknode stacklist;
typedef stacklist *llink;
llink path=NULL;
//栈数据的存入
llink push(llink stack,int x,int y)
{
llink newcode;
newcode=(llink)malloc(sizeof(stacklist));
if(!newcode)
{
printf("内存分配失败\n");
return NULL;
}
newcode->x=x;
newcode->y=y;
newcode->next=stack;
stack=newcode;
return stack;
}
//栈数据的输出
llink pop(llink stack,int *x,int *y)
{
llink top;
if(stack!=NULL)
{
top=stack;
stack=stack->next;
*x=stack->x;
*y=stack->y;
free(top);
return stack;
}
else *x=-1;
}
//主程序
//数字:表示可走的路
//数字:表示墙,不通
main()
{
//制定迷宫数组
int migong[7][10]={1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,1
,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,1,1,1,0,0,0,1,1,1,0
,0,1,1,1,1,1,1,1,1,1,1};
int i =0,j=0;
int x=5,y=8;
printf("迷宫如下所示\n");
for(i=0;i<=6;i++)
{
for(j=0;j<=9;j++)
printf("%d ",migong[i][j]);
printf("\n");
printf("\n");
}
while(x!=1||y!=1)
{
migong[x][y]=2;
if(migong[x-1][y]==0)//向上走
{
x--;
path=push(path,x,y);
}
else if(migong[x+1][y]==0)//向下走
{
x++;
path=push(path,x,y);
}
else if(migong[x][y-1]==0)//向左走
{
y--;
path=push(path,x,y);
}
else if(migong[x][y+1]==0)//向右走
{
y++;
path=push(path,x,y);
}
else//上下左右都走不通,退回来,并标定退回路线
{
migong[x][y]=3;
path=pop(path,&x,&y);
}
}
migong[x][y]=2;//标示出最后一点
printf("3\n表示曾经走过的路线,\n2\n表示走出迷宫路径");
printf("在寻找过程中的路线记录如下所示\n");
for(i=0;i<=6;i++)
{
for(j=0;j<=9;j++)
printf("%d ",migong[i][j]);
printf("\n");
printf("\n");
}
}
第 4 页 共 4页