标签:
| 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