hdu 2102 A计划
2013-04-19 18:15
351 查看
题目 http://acm.hdu.edu.cn/showproblem.php?pid=2102
刚开始做这个题目时候呢 不会做 不知道怎么样下手 看了一下别人代码又觉得很容易哦
在这里要注意二个地方 1. 当某个位置 第一层 第二层都是 # 时 要小心 就可以把它们当做是 * 一堵墙 呵呵
2. 当某个位置 第一层是 # 第二层是 * 时 要注意 你可以把二个位置都当做 * 或者第一层是 * 第二层是 # 也一样哦。。
具体看代码
刚开始做这个题目时候呢 不会做 不知道怎么样下手 看了一下别人代码又觉得很容易哦
在这里要注意二个地方 1. 当某个位置 第一层 第二层都是 # 时 要小心 就可以把它们当做是 * 一堵墙 呵呵
2. 当某个位置 第一层是 # 第二层是 * 时 要注意 你可以把二个位置都当做 * 或者第一层是 * 第二层是 # 也一样哦。。
具体看代码
#include<iostream> #include<cstring> #include<queue> #include<cstdio> using namespace std; struct node{ int x,y,z; int time; }; int sx,sy,sz,ex,ey,ez,N,M,T,mark[3][12][12]; ///mark标记 char a[3][12][12]; ///记录 int dre[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; ///上下左右 void DFS() { queue<node>Q; ///队列 node d,p; d.x=sx; d.y=sy; d.z=sz; ///公主位置 d.time=0; ///时间 mark[sz][sx][sy]=1; Q.push(d); while(!Q.empty()) { p=Q.front(); Q.pop(); if(p.time>T) break; ///超时 if(p.time<=T&&p.x==ex&&p.y==ey&&p.z==ez) ///是否是P点 { cout<<"YES"<<endl; return ; } int i; for(i=0;i<4;i++) ///上下左右 { d=p; d.x+=dre[i][0]; d.y+=dre[i][1]; ///在这个数组里面 if(d.x>=1&&d.x<=N&&d.y>=1&&d.y<=M&&d.z>=1&&d.z<=2&&a[d.z][d.x][d.y]!='*'&&!mark[d.z][d.x][d.y]) { mark[d.z][d.x][d.y]=1; if(a[d.z][d.x][d.y]=='.'||a[d.z][d.x][d.y]=='P') ///记录时间 { d.time+=1; } if(a[d.z][d.x][d.y]=='#') ///是否可以转入另外一层 { if(d.z==1) d.z=2; else d.z=1; d.time+=1; mark[d.z][d.x][d.y]=1; ///标记点 } Q.push(d); ///把d放入Q中 } } } cout<<"NO"<<endl; } int main() { int c,i,j,k; scanf("%d",&c); while(c--) { scanf("%d %d %d",&N,&M,&T); for(k=1;k<=2;k++) for(i=1;i<=N;i++) for(j=1;j<=M;j++) { cin>>a[k][i][j]; if(a[k][i][j]=='S') { sx=i,sy=j,sz=k;///记录公主位置 } if(a[k][i][j]=='P') { ex=i,ey=j,ez=k;///出口 } /// a[i][j][k]= mark[k][i][j]=0; ///初始化 } ///不能转的# 简化一下 for(i=1;i<=N;i++) for(j=1;j<=M;j++) { if(a[1][i][j]==a[2][i][j]&&a[1][i][j]=='#') ///如果第一层第二层都是# 就相当与* { a[1][i][j]=a[2][i][j]='*'; } if(a[1][i][j]=='#'&&a[2][i][j]=='*') ///注意 { a[1][i][j]='*'; } if(a[2][i][j]=='#'&&a[1][i][j]=='*') ///同理 { a[2][i][j]='*'; } } DFS(); } return 0; }
相关文章推荐
- hdu 2102 A计划 bsf搜索
- HDU 2102 A计划 bfs
- hdu(2102) A计划
- HDU 2102 A计划(三维BFS)
- HDU 2102 A计划(深搜)
- HDU 2102 A计划(BFS)
- HDU-2102-A计划(BFS+优先队列)
- hdu 2102 A计划 (dfs)
- A计划 HDU - 2102
- hdu 2102 A计划bfs
- hdu 2102 A计划 队列
- HDU 2102 A计划
- A计划 hdu 2102
- HDU-2102 A计划
- HDU 2102 A计划
- hdu 2102 A计划
- hdu 2102 A计划 我用的是dfs
- HDU 2102 A计划
- HDU 2102 A计划
- HDU 2102 A计划 (搜索 队列)