}
}
printf(\,a[i][j]);
printf(\);
}//打印迷宫 return a;
struct node {
int val1; int val2; node *next;
};//针对迷宫的结构体类型储存横纵坐标 typedef struct node *STACK; void MakeNull(STACK &S) {
S = new node; S->next = NULL;
}//栈的初始化
void Push(int x,int y, STACK S) {
STACK stk; stk = new node; stk->val1 = x; stk->val2 = y; stk->next = S->next; S->next = stk;
}//压栈
void Pop(STACK S) {
STACK stk; if(S->next){ }
stk = S->next; S->next = stk->next; delete stk;
}//弹栈
int Top1(STACK S) {
if(S->next)
return(S->next->val1); return NULL; else
}//返回栈顶第一个元素 int Top2(STACK S)
{ }
int main(int argc, char* argv[]) {
int x, y, z; int i,j; int **w; float r; STACK Q, P; MakeNull(Q);
MakeNull(P);//两个栈的初始化 srand(time(NULL)); x=0;y=0;z=0;
printf(\); scanf_s(\,&x);
printf(\); scanf_s(\,&y); if(S->next)
return(S->next->val2); return NULL; else
printf(\); scanf_s(\,&r);
getchar();//用户输入迷宫的行数列数、通路障碍比例 w=maze(x,y,r); getchar();
int ii=1;int jj=1; while(ii!=x || jj!=y) {
if(w[ii-1][jj]*w[ii+1][jj]*w[ii][jj-1]*w[ii][jj+1]==0) {
z++;
if(0==w[ii+1][jj]) {
Push(ii,jj,Q);w[ii][jj]=2; ii++;
}//选择向下的方向 else if(0==w[ii][jj+1]) {
Push(ii,jj,Q);w[ii][jj]=2; jj++;
}//选择向右的方向 else if(0==w[ii][jj-1]) {
}
Push(ii,jj,Q);w[ii][jj]=2; jj--;
}//选择向左的方向 else {
Push(ii,jj,Q);w[ii][jj]=2; ii--;
}//四周有路,压栈,将走过格置
}else if(w[ii-1][jj]+w[ii+1][jj]+w[ii][jj-1]+w[ii][jj+1]==4) {//起点四周均为墙或返回至起点,无路,退出 {
Pop(Q);z--; w[ii][jj]=1; if(-1==w[ii+1][jj]) { }
else if(-1==w[ii][jj+1]) { }
else if(-1==w[ii][jj-1]) { } else { }
ii--; jj--; jj++; ii++;
printf(\); getchar(); return -1;
}else
}//四周没路时,弹栈,栈中元素数-1,退到上一个位置
w[1][1]=0;//将起点置 for(i=0;i for(j=0;j printf(\); printf(\,w[i][j]); }//图像打印通路,用-1表示 } for(i=z;i>0;i--) { Push(Top1(Q),Top2(Q),P); Pop(Q); }//原栈元素逆序压入新栈 for(i=z;i>0;i--) { printf(\,Top1(P),Top2(P)); Pop(P); }//正序打印 getchar(); return 0; 四、运行结果