Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8120 | Accepted: 3547 |
Description
Input
Output
Sample Input
2 8 8 ######## #......# #.####.# #.####.# #.####.# #.####.# #...#..# #S#E#### 9 5 ######### #.#.#.#.# S.......E #.#.#.#.# #########
Sample Output
37 5 5 17 17 9
1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 #include<iostream> 5 using namespace std; 6 7 struct node 8 { 9 int x,y; 10 int step; 11 }; 12 int n,m; 13 char map[50][50]; 14 int vis[50][50]; 15 int dir[4][2] = {{-1,0},{0,-1},{1,0},{0,1}};//上左下右顺时针; 16 queue <node> que; 17 int ans3; 18 19 int dfs(int sx,int sy, int ex, int ey, int d, int ans) 20 { 21 if(sx == ex && sy == ey) 22 return ans; 23 d = (d+1)%4;//左转; 24 while(map[sx+dir[d][0]][sy+dir[d][1]] == '#') 25 d = (d+3)%4;//当有墙的时候就右转直到没有墙; 26 return dfs(sx+dir[d][0],sy+dir[d][1],ex,ey,d,ans+1); 27 } 28 29 void bfs(int sx,int sy, int ex, int ey) 30 { 31 while(!que.empty()) 32 que.pop(); 33 memset(vis,0,sizeof(vis)); 34 35 que.push((struct node){sx,sy,1}); 36 vis[sx][sy] = 1; 37 38 while(!que.empty()) 39 { 40 struct node u = que.front(); 41 que.pop(); 42 if(u.x == ex && u.y == ey) 43 { 44 ans3 = u.step; 45 return; 46 } 47 if(u.x-1 >= 1 && !vis[u.x-1][u.y] && map[u.x-1][u.y] != '#') 48 { 49 vis[u.x-1][u.y] = 1; 50 que.push((struct node){u.x-1,u.y,u.step+1}); 51 } 52 if(u.x+1 <= n && !vis[u.x+1][u.y] && map[u.x+1][u.y] != '#') 53 { 54 vis[u.x+1][u.y] = 1; 55 que.push((struct node){u.x+1,u.y,u.step+1}); 56 } 57 if(u.y-1 >= 1&& !vis[u.x][u.y-1] && map[u.x][u.y-1] != '#') 58 { 59 vis[u.x][u.y-1] = 1; 60 que.push((struct node){u.x,u.y-1,u.step+1}); 61 } 62 if(u.y+1 <= m && !vis[u.x][u.y+1] && map[u.x][u.y+1] != '#') 63 { 64 vis[u.x][u.y+1] = 1; 65 que.push((struct node){u.x,u.y+1,u.step+1}); 66 } 67 } 68 } 69 int main() 70 { 71 int t; 72 int sx,sy,ex,ey; 73 scanf("%d",&t); 74 while(t--) 75 { 76 memset(map,'#',sizeof(map));//外面加一道墙,从s进去之后只有一条路可走; 77 scanf("%d %d",&m,&n); 78 for(int i = 1; i <= n; i++) 79 { 80 for(int j = 1; j <= m; j++) 81 { 82 cin>>map[i][j]; 83 if(map[i][j] == 'S') 84 { 85 sx = i; 86 sy= j; 87 } 88 if(map[i][j] == 'E') 89 { 90 ex = i; 91 ey = j; 92 } 93 } 94 } 95 printf("%d %d ",dfs(sx,sy,ex,ey,1,1),dfs(ex,ey,sx,sy,1,1)); 96 bfs(sx,sy,ex,ey); 97 printf("%d\n",ans3); 98 } 99 return 0; 100 }