码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2102 A计划

时间:2014-07-16 15:31:15      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:os   for   io   re   c   ar   

本题有几个坑注意一下就ok了。

1、碰到传送门一定传送;

2、地图两边都是传送门时不可行;

3、起点S不一定是(0,0,0)       //在这点wa了好几发 T_T

 

处理好这几点后就是一个裸的bfs。(也有大牛写的dfs,个人感觉bfs比较好)

 

 

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;

struct node {
int x,y,z;
int step;
void init (int nx,int ny,int nz,int nstep){
x=nx;y=ny;z=nz;step=nstep;
}
};

int c,n,m,t;
int x,y,z;
char map[5][20][20];
int visit[5][20][20];
int dir[4][2]={0,1,0,-1,1,0,-1,0};

int bfs (){
node a,b;
queue <node> q;
while (!q.empty ())
q.pop ();
a.init (x,y,z,0);
q.push (a);
while (!q.empty ()){
a=q.front ();
q.pop ();
if (a.x<0||a.x>=n||a.y<0||a.y>=m)
continue ;
if (map[a.z][a.x][a.y]==‘#‘){
a.z=(a.z+1)%2;
if (map[a.z][a.x][a.y]==‘#‘)
continue ;
}
if (visit[a.z][a.x][a.y]||map[a.z][a.x][a.y]==‘*‘||a.step>t)
continue ;
visit[a.z][a.x][a.y]=1;
if (map[a.z][a.x][a.y]==‘P‘)
return a.step<=t?1:0;
for (int i=0;i<4;i++){
b=a;
b.step++;
b.x+=dir[i][0];
b.y+=dir[i][1];
q.push (b);
}
}
return 0;
}

int main (){
cin>>c;
while (c--){
memset (visit,0,sizeof visit);

cin>>n>>m>>t;
for (int j=0;j<2;j++)
for (int i=0;i<n;i++){
cin>>map[j][i];
for (int o=0;o<m;o++)
if (map[j][i][o]==‘S‘)
z=j,x=i,y=o;
}

if (bfs ())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;

}
return 0;
}

HDU 2102 A计划,布布扣,bubuko.com

HDU 2102 A计划

标签:os   for   io   re   c   ar   

原文地址:http://www.cnblogs.com/gfc-g/p/3848113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!