DFS --TLE了,,,DFS的代码:
#include<iostream>
#include<cstdio>
#include<memory.h>
using namespace std;
char maze[110][110];
int vis[110][110];
int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}};
int m,n,k,x1,y1,x2,y2,flag,direction;
bool IN(int x,int y)
{
if(1<=x&&x<=m&&1<=y&&y<=n)
return true;
else
return false;
}
void DFS(int x,int y,int k1)
{
// printf("%d %d %d\n",x,y,k1);
if(x==x2&&y==y2 && k1<=k)
{
flag=1;
//printf("x2==%d y2==%d k1=%d\n",x,y,k1);
return ;
}
if(k1>k)
return;
int temp=direction;
for(int i=0;i<4;i++)
{
int x0=x+dir[i][0];
int y0=y+dir[i][1];
if(IN(x0,y0) && vis[x0][y0]==0 && maze[x0][y0]=='.')
{
if(direction==-1)
{
direction=i;
vis[x0][y0]=1;
DFS(x0,y0,0);
vis[x0][y0]=0;
direction=-1;
}
else if(direction==i)
{
vis[x0][y0]=1;
DFS(x0,y0,k1);
vis[x0][y0]=0;
}
else
{
direction=i;
vis[x0][y0]=1;
DFS(x0,y0,k1+1);
direction=temp;
vis[x0][y0]=0;
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&m,&n);
getchar();
for(int i=1;i<=m;i++)
{
gets(maze[i]+1); /**gets(maze[i]);*/
}
scanf("%d %d %d %d %d",&k,&y1,&x1,&y2,&x2);
direction=-1;
memset(vis,0,sizeof(vis));
vis[x1][y1]=1;
flag=0;
DFS(x1,y1,0);
if(flag==1)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}