标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 10331 | Accepted: 4466 |
Description
Input
Output
Sample Input
2 8 8 ######## #......# #.####.# #.####.# #.####.# #.####.# #...#..# #S#E#### 9 5 ######### #.#.#.#.# S.......E #.#.#.#.# #########
Sample Output
37 5 5 17 17 9
Source
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<vector> using namespace std; queue<int> q; int tt,n,m,sx,sy,ex,ey,cnt; bool flag,vis[50][50]; int dic[4][2]={{0,-1},{-1,0},{0,1},{1,0}}; char s[50][50]; bool check(int x,int y) { if(x<0||x>=n||y<0||y>=m) return false; return true; } void dfs(int x,int y,int xx,int yy,int d) { if(x==xx&&y==yy) { flag=1; return ; } d=(d+3)%4; for(int i=d;i<d+4;i++) { int tx,ty; tx=x+dic[i%4][0],ty=y+dic[i%4][1]; if(!check(tx,ty)||s[tx][ty]==‘#‘) continue; cnt++; dfs(tx,ty,xx,yy,i%4); if(flag) return ; } } int bfs() { int step,x,y,xx,yy; while(!q.empty()) q.pop(); q.push(sx),q.push(sy),q.push(1); vis[sx][sy]=1; while(!q.empty()) { x=q.front(),q.pop(); y=q.front(),q.pop(); step=q.front(),q.pop(); if(x==ex&&y==ey) return step; for(int i=0;i<4;i++) { xx=x+dic[i][0]; yy=y+dic[i][1]; if(!check(xx,yy)||vis[xx][yy]||s[xx][yy]==‘#‘) continue; q.push(xx),q.push(yy),q.push(step+1); vis[xx][yy]=1; } } } int main() { scanf("%d",&tt); while(tt--) { memset(vis,0,sizeof(vis)); scanf("%d%d",&m,&n); for(int i=0;i<n;i++) scanf("%s",s[i]); for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(s[i][j]==‘S‘) sx=i,sy=j; if(s[i][j]==‘E‘) ex=i,ey=j; } } cnt=1; flag=0; dfs(sx,sy,ex,ey,0); printf("%d",cnt); cnt=1; flag=0; dfs(ex,ey,sx,sy,0); printf(" %d",cnt); printf(" %d\n",bfs()); } return 0; }
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4287436.html