HDU 2102 A计划
2015-09-17 20:36
369 查看
坑点:1:当两边都是#号是,是死路
2:当两边种,一边是#,另一边是*是,也是死路。
其他都没啥好说的
这是一道比较难搞定的搜索题,三维立体搜索。
2:当两边种,一边是#,另一边是*是,也是死路。
其他都没啥好说的
这是一道比较难搞定的搜索题,三维立体搜索。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int maxm=20; char map[maxm][maxm][maxm]; int vis[maxm][maxm][maxm]; int m,n,time; int dir[4][2]= {{1,0},{-1,0},{0,1},{0,-1}}; struct node { int x; int y; int z; int step; } queue[maxm*maxm*maxm]; void bfs() { struct node now,pre; int e=0,h=1; queue[0].x=0; queue[0].y=0; queue[0].z=0; queue[0].step=0; vis[0][0][0]=1; while(e<h) { pre=queue[e]; if(map[pre.z][pre.x][pre.y]=='P') { printf("YES\n"); return; } for(int i=0; i<4; i++) { now.x=pre.x+dir[i][0]; now.y=pre.y+dir[i][1]; now.z=pre.z;//非常重要 now.step=pre.step+1; if(now.x>=0&&now.x<m&&now.y>=0&&now.y<n&&now.step<=time&&(!vis[now.z][now.x][now.y])&&map[now.z][now.x][now.y]!='*') { if(map[now.z][now.x][now.y]=='#') { vis[now.z][now.x][now.y]=1; now.z=!now.z; } vis[now.z][now.x][now.y]=1; queue[h++]=now; } } e++; } printf("NO\n"); return; } int main() { int t; scanf("%d",&t); while(t--) { int i,j,k; memset(vis,0,sizeof(vis)); scanf("%d%d%d",&m,&n,&time); for(i=0; i<2; i++) { for(j=0; j<m; j++) { scanf("%s",map[i][j]); } } for(i=0;i<2;i++) { for(j=0;j<m;j++) { for(k=0;k<n;k++) { if((map[i][j][k]=='#'&&map[!i][j][k]=='#')||(map[i][j][k]=='*'&&map[!i][j][k]=='#')||(map[i][j][k]=='#'&&map[!i][j][k]=='*')) { map[i][j][k]=map[!i][j][k]='*'; } } } } bfs(); } return 0; }
相关文章推荐
- 0917Android基础自定义View(Path)
- swift 日历练习
- ios9键盘回调与消息通知,理论上应该是个bug
- 大话移动app测试_阅读
- 以树形结构的形式输出指定目录下面的所有文件
- 优秀IT技术文章集(最新)(高质量)
- CGS flip 学习总结
- bash shell基础之一
- android学习:service 绑定,与服务进行通信
- EPEL&&Yum Priorities
- git 文件删除与恢复
- XML文件在TwinCAT里面的作用
- 找出一组数据中多次出现的所有数字(空间要求最低)
- 浅谈数据结构-归并排序
- test4.1
- VS2013 快捷键乱掉如何修改回来
- 移动王国的诱惑【经济学人】
- VS2013 快捷键乱掉如何修改回来
- 防盗链的开发
- Android Matrix