| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
做了1个多小时,1A啊啊,刚开始学搜索,拙代码供大家看看#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
char map[50][50];
int step[50][50];
int dir[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int lDFS(int i,int j,int s,int now)
{
if(map[i][j]=='E')return s;
for(int d=now;d<now+4;++d)
{
int di=i+dir[d%4][0];
int dj=j+dir[d%4][1];
if(d<=0)d+=4;
if(map[di][dj]!='#')return lDFS(di,dj,s+1,(d-1)%4);
d%=4;
}
return -1;
}
int rDFS(int i,int j,int s,int now)
{
if(map[i][j]=='E')return s;
for(int d=now+4;d>now;--d)
{
int di=i+dir[d%4][0];
int dj=j+dir[d%4][1];
if(map[di][dj]!='#')return rDFS(di,dj,s+1,(d+1)%4);
}
return -1;
}
typedef struct Coo
{
int x,y;
}coordinate;
int BFS(int i,int j)
{
queue<coordinate> C;
coordinate t;
t.x=i,t.y=j;
C.push(t);
step[t.x][t.y]=1;
while(!C.empty())
{
t=C.front();
C.pop();
if(map[t.x][t.y]=='E')return step[t.x][t.y];
coordinate temp;
for(int d=0;d<4;++d)
{
temp=t;
temp.x+=dir[d][0];
temp.y+=dir[d][1];
if(map[temp.x][temp.y]!='#' && !step[temp.x][temp.y]){ C.push(temp);step[temp.x][temp.y]=step[t.x][t.y]+1;}
}
}
return -1;
}
int main()
{
int T;
cin>>T;
while(T--)
{
int r,l;
cin>>l>>r;
int s_i,s_j,e_i,e_j;
memset(map,'#',sizeof(map));
memset(step,0,sizeof(step));
for(int i=1;i<=r;++i)
{
for(int j=1;j<=l;++j)
{
cin>>map[i][j];
if(map[i][j]=='S')s_i=i,s_j=j;
if(map[i][j]=='E')e_i=i,e_j=j;
}
}
cout<<lDFS(s_i,s_j,1,0)<<" "<<rDFS(s_i,s_j,1,0)<<" "<<BFS(s_i,s_j)<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator