HDU 2102 A计划
2014-07-16 10:32
537 查看
本题有几个坑注意一下就ok了。
1、碰到传送门一定传送;
2、地图两边都是传送门时不可行;
3、起点S不一定是(0,0,0) //在这点wa了好几发 T_T
处理好这几点后就是一个裸的bfs。(也有大牛写的dfs,个人感觉bfs比较好)
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计划
- HDU 2102 A计划(广度优先搜索+数据)
- hdu 2102A计划(搜索,两层迷宫)
- hdu 2102 A计划 队列
- HDU--杭电--2102--A计划--深搜
- hdu 2102: A计划(BFS+跨层小剪枝)
- hdu 2102 A计划 bfs搜索 解题报告
- HDU 2102 A计划 (BFS)
- hdu 2102 A计划(双层BFS)(具体解释)
- HDU 2102 A计划
- HDU 2102 A计划
- hdu 2102 A计划( bfs)
- HDU 2102 A计划
- HDU 2102 A计划
- HDU-2102 A计划 BFS
- HDU 2102--A计划【BFS】
- hdu 2102 A计划
- hdu 2102 A计划_bfs搜索
- HDU-2102 A计划
- HDU 2102 A计划 经典搜索~