迷宫问题,我的代码到底有什么问题呢?求解,在线等
问题是这样的
标题: 迷宫问题
时 限: 100000 ms
内存限制: 100000 K
总时限: 3000 ms
描述: 迷宫问题
迷宫是一个二维矩阵,其中1为墙,0为路,3为入口,4为出口.要求从入口开始,从出口结束,按照 下,左,上,右 的顺序来搜索路径.
输入: 迷宫宽度w 迷宫高度h
迷宫第一行
迷宫第二行
...
迷宫第h 行
输出: 入口横坐标1 入口纵坐标1
横坐标2 纵坐标2
横坐标3 纵坐标3
横坐标4 纵坐标4
...
横坐标n-1 纵坐标n-1
出口横坐标n 出口纵坐标n
输入样例: 8 10
1 1 1 1 1 1 1 1
1 0 1 1 0 1 0 1
1 0 1 0 0 1 0 1
1 1 0 3 1 0 1 1
1 0 0 1 0 0 4 1
1 0 0 0 0 1 1 1
1 0 1 0 0 1 0 1
1 0 1 0 0 0 1 1
1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1
输出样例: 3 3
2 3
2 4
2 5
3 5
3 6
3 7
4 7
4 6
4 5
4 4
5 4
6 4
#include <stdio.h>#include <stdlib.h>struct num{ int x; int y;};struct sqlist{ struct num *top; struct num *base; int MAXSIZE;};struct sqlist s;void Initstack(){ s.base=(struct num *)malloc(20*sizeof(struct num)); if(s.base==NULL) exit(0); s.top=s.base; s.MAXSIZE=20;}void push(int x,int y,struct sqlist s){ if(s.top-s.base>=s.MAXSIZE) { s.base=(struct num *)realloc(s.base,(s.MAXSIZE+5)*sizeof(struct num)); if(s.base==NULL) exit(0); s.top=s.base+s.MAXSIZE; s.MAXSIZE += 5; } s.top->x =x; s.top->y=y; s.top++;}void pop(struct sqlist s){ if(s.base==s.top) exit(0); s.top--;}int main(){ int m,n; int i,j; int fx=0;//0~3分别是上下左右 int **p,**p1; int x,y; scanf("%d%d",&x,&y); p=(int **)malloc(x*sizeof(int *)); for(i=0;i<x;i++) { p[i]=(int *)malloc(y*sizeof(int)); } for(i=0;i<x;i++) { for(j=0;j<y;j++) { scanf("%d",&p[i][j]); } } p1=(int **)malloc(x*sizeof(int *)); for(i=0;i<x;i++) { p1[i]=(int *)malloc(y*sizeof(int)); } for(i=0;i<x;i++) { for(j=0;j<y;j++) { p1[i][j]=0; } } Initstack(); for(i=0;i<x;i++) { for(j=0;j<y;j++) { if(p[i][j]==3) { p1[i][j]=1; push(i,j,s); m=i; n=j; goto lv1; } } } lv1:while(1) { if(fx!=1&&p1[i][j-1]==0&&p[i][j-1]==0) { j--; m=i; n=j; p1[i][j]=1; push(m,n,s); fx=0; } else if(fx!=0&&p1[i][j+1]==0&&p[i][j+1]==0) { j++; m=i; n=j; p1[i][j]=1; push(m,n,s); fx=1; } else if(fx!=2&&p1[i+1][j]==0&&p[i+1][j]==0) { i++; m=i; n=j; p1[i][j]=1; push(m,n,s); fx=3; } else if(fx!=3&&p1[i-1][j]==0&&p[i-1][j]==0) { i--; m=i; n=j; p1[i][j]=1; fx=2; } else { pop(s); i=s.top->x; j=s.top->y; } } while(s.top!=s.base) { printf("%d %d\n",s.top->x,s.top->y); s.top--; } return 0;}