哈工大数据结构大作业 - 迷宫老鼠 下载本文

}

}

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;

四、运行结果