t[i]=(int *) malloc(n*sizeof(int)); //初始化标志迷宫矩阵每一位置是否已走过的矩阵
for (j=0; j<n; j++)
*(t[i]+j)=0;
}
head=(Record1 *) malloc(sizeof(Record1));
psnewbe=head;
psnewaf=head; //初始化双向链表栈
head->next=NULL;
head->before=NULL;
head1=(Long1 *) malloc(sizeof(Long1));
head1->next=NULL;
psnew1=head1;
flag=0; //初始化标志是否存在走出迷宫路径的标志变量
Num=0;
i=0;
j=0; //初始化当前单元行列标,将迷宫左上角单元作为出发点
k=0; //方向参数初始化为0,对左上角单元从头开始试探可走方向
loop: if (trial(i, j, k, n, m, p, t)==0) //回溯试探开始
{
if (i==0&&j==0) //在起始点已无方向可走,回溯结束
{
goto exit;
}
else
{
if (k==0) //(i,j)元的所有方向均不可走,回溯
{
i=psnewaf->x;
j=psnewaf->y;
k=psnewaf->mark;
goto loop;
}
else //在(i,j)元上沿k方向后的所有方向均不可走,回溯
{
*(t[i]+j)=0;
free (psnewaf);
psnewbe->next=NULL;
psnewaf=psnewbe; //(i,j)元节点弹出栈
psnewbe=psnewbe->before;
i=psnewaf->x;
j=psnewaf->y;
k=psnewaf->mark;
goto loop;
}
}
}
else
{
if (k==0) //从头开始为(i,j)元找到了可走方向trial(i, j, k, n, m, p, t)
{
current=(Record1 *) malloc(sizeof(Record1));
current->x=i;
current->y=j; //建立(i,j)元节点
current->ma