请你们帮忙看看这段程序,求迷宫是否有解问题,编译出错了。
这道题的题目如下:Input
有多个测试用例。
每个测试用例的第一行是2个整数 m, n ,表示迷宫的长度和宽度。0 < m, n ≤ 50
第二行是4个整数 a, b, c, d,其中(a, b)表示迷宫的入口坐标,(c, d)表示出口坐标。
最后一个用例,m=n=0,不用处理。
Output
对每个迷宫输出一行结果,如果该迷宫有解,则输出"YES",否则输出"NO"。
Sample Input
5 5
0 0 4 4
.#..#
.#..#
....#
#.#..
#....
0 0
Sample Output
YES
大家就指点指点就行,感觉我写的思路是不会错。
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000
int ans=0;
int visited[MAX][MAX]={0}; //用来记录哪些点已被访问
struct Stack
{
int x;
int y;
}S[MAX];
int top=-1;
void Push(int x,int y)
{
top++;
S[top].x=x;
S[top].y=y;
}
void Pop()
{
top--;
}
void Maze(char **s,int a,int b,int c,int d,int length,int width)
{
int x,y;
int flag=0;
Push(a,b);
if(a==c && b==d) //若当前的坐标与终点坐标一致是,表示找到了路径走出迷宫
{
ans=1;
return ;
}
/*********** 判断当前坐标的下一个可被访问的点坐标 **********/
if(s[a][b+1]=='.' && visited[a][b+1]==0 && b+1<length)
{
x=a;
y=b+1;
visited[a][b]=1;
Maze(s,x,y,c,d,length,width);
}
if(s[a][b-1]=='.' && visited[a][b-1]==0 && b-1>0)
{
x=a;
y=b-1;
visited[a][b]=1;
Maze(s,x,y,c,d,length,width);
}
if(s[a+1][b]=='.' && visited[a+1][b]==0 && a+1<width)
{
x=a+1;
y=b;
visited[a][b]=1;
Maze(s,x,y,c,d,length,width);
}
if(s[a-1][b]=='.' && visited[a-1][b]==0 && a-1>0)
{
x=a-1;
y=b;
visited[a][b]=1;
Maze(s,x,y,c,d,length,width);
}
/************ 若当前的坐标没有下一个可被访问点,则删除栈顶元素 ************/
if(flag)
{
Pop();
visited[S[top].x][S[top].y]=0;
Maze(s,S[top].x,S[top].y,c,d,length,width);
}
}
int main()
{
int i;
int m,n;
int a,b,c,d;
while(scanf("%d %d",&m,&n)!=EOF && (m!=0 || n!=0))
{
printf("请输入迷宫的入口和出口:\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
char **s=(char **)malloc(n*sizeof(char *));
for(i=0;i<n;i++)
{
if((s[i]=(char *)malloc(m*sizeof(char)))==NULL)
exit(0);
}
getchar();
for(i=0;i<n;i++)
{
scanf("%s",s[i]);
}
Maze(s,a,b,c,d,m,n);
if(ans==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}