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; }