算法丑陋,时间略长,还望指教。
#include <stdio.h>
#include <stdlib.h>
int flag;
void findway(int size,char*a,char*b,int ay,int ax,int by,int bx)//在a位置寻找走向b的下一步
{
int side=size-2;//真实迷宫的大小
//输入问题
if(*a=='#'||*b=='#')
return;
//找到的判断
if((by==ay&&(bx==ax-1||bx==ax+1))||(bx==ax&&(by==ay+1||by==ay-1))||(by==ay&&ax==bx))
{
flag=1;
return;
}
//必然找不到的情况
if(*(a+1)=='#'&&*(a-1)=='#'&&*(a+size)=='#'&&*(a-size)=='#')
return;
//还有希望的情况
else
{
*a='#';//反正是废了
if(*(a+size)=='.')
findway(size,a+size,b,ay+1,ax,by,bx);
if(*(a-size)=='.')
findway(size,a-size,b,ay-1,ax,by,bx);
if(*(a-1)=='.')
findway(size,a-1,b,ay,ax-1,by,bx);
if(*(a+1)=='.')
findway(size,a+1,b,ay,ax+1,by,bx);
}
}
int main()
{
int number,i,j;
scanf("%d",&number);
int size[number];
int res[number];
for(i=0;i<number;i++)
{
flag=0;
scanf("%d",&size[i]);//读入第i+1个迷宫的大小
size[i]+=2;
char maze[size[i]][size[i]];
for(j=1;j<size[i]-1;j++)
scanf("%s",&maze[j][1]);
for(j=0;j<size[i];j++)
maze[0][j]=maze[size[i]-1][j]='#';
for(j=1;j<size[i]-1;j++)
maze[j][0]=maze[j][size[i]-1]='#';
int ay,ax,by,bx;
scanf("%d",&ay);
scanf("%d",&ax);
scanf("%d",&by);
scanf("%d",&bx);
ay++;
ax++;
by++;
bx++;
findway(size[i],&maze[ay][ax],&maze[by][bx],ay,ax,by,bx);
res[i]=flag;
}
for(i=0;i<number;i++)
res[i]?(printf("YES\n")):(printf("NO\n"));
return 0;
}