题目链接:
题目分析:感觉题目说的不是多么的清晰,看了别人的分析觉得,也就是说在一个方向不能拐四次弯;大于四次就要return了;方向可以自己定义,方便使用就好
AC代码:
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int n , m; 8 char map[110][110]; 9 int ex,ey,sx,sy,flag ;10 int dir[4][2] = { 1,0,0,-1,-1,0,0,1};11 int vis[110][110];12 bool judge(int x,int y)13 {14 if(x<1 || x>n || y<1 || y>m || map[x][y] == '#')15 return false;16 return true;17 }18 void dfs(int D,int x,int y)19 {20 int xx,yy;21 22 if(x == ex && y == ey)23 {24 flag =1;25 return ;26 }27 int sd = D-1;28 for(int i =0; i<4; i++)29 {30 D = (sd+i+8)%4;31 xx = x + dir[D][0];32 yy = y + dir[D][1];33 //printf("dd: %d %d\n",xx,yy);34 if(judge(xx,yy))35 {36 if(vis[xx][yy] == 4) return ;37 vis[xx][yy]++;38 dfs(D,xx,yy);39 return ;//这个可不能忘40 }41 }42 return ;43 }44 int main()45 {46 char s;47 while(scanf("%d %d",&n,&m)!=EOF)48 {49 memset(vis,0,sizeof(vis));50 for(int i = 1; i<=n; i++)51 for(int j =1;j<=m; j++)52 {53 scanf(" %c",&map[i][j]);54 if(map[i][j] == 'T') sx =i,sy =j;55 if(map[i][j] == 'X') ex =i,ey =j;56 }57 scanf(" %c",&s);58 vis[sx][sy] = 1;59 int dr;60 if(s == 'S') dr = 0;61 else if(s == 'W') dr = 1;62 else if(s == 'N') dr = 2;63 else dr = 3;64 flag = 0;65 dfs(dr,sx,sy);66 if(flag)67 printf("YES\n");68 else printf("NO\n");69 }70 return 0;71 }