2016 UESTC Training Search Algorithm and StringB - Xiper的奇妙历险(2)(三维迷宫)
来源:互联网 发布:unity 删除数组 编辑:程序博客网 时间:2024/05/17 02:50
题目链接:http://acm.uestc.edu.cn/#/contest/show/99
B - Xiper的奇妙历险(2)
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
转眼间,已经过了10年。
潘警官赶忙掏出光剑,向日天砍去。不料成为咸鱼王的日天已然是刀枪不入,毫发无损。面对强大的日天,
. —— 表示该位置为空。x —— 表示该位置上有障碍,不能移动。U —— 表示上楼的楼梯入口。D —— 表示下楼的楼梯入口。X —— 表示Xiper 现在所在的位置。Y —— 表示Xiper 要到达的出口的位置,保证在第一层楼的边界上。
每秒
Input
第一行三个数字
Output
如果可以到达,输出一个数
这里的Xiper和日天都是UESTC校队的的成员,总是喜欢出一些带黑故事的题。。。
题意很好理解,一个典型的三维迷宫,途中设置了障碍,和上下楼梯口;但是请注意,到达楼梯口并不意味着一定上下楼;
迷宫问题找最短路优先考虑bfs,三维bfs只不过比二维的bfs多了两种状态转移方向而已,所以只要你入门了,会用bfs找最短路,不管是几维迷宫都可以搞定;
#include<bits/stdc++.h>using namespace std;#define MAXN 55char s[MAXN][MAXN][MAXN];int visit[MAXN][MAXN][MAXN];//记忆化数组 struct node{int n,l,r,step;}start;struct node2{int dl,dr;}dre[4];int n,l,r;int bfs(struct node start){int i;queue<node> q;q.push(start);//初始状态入队 while(!q.empty()){struct node x=q.front();q.pop();if(s[x.n][x.l][x.r]=='Y')return x.step;for(i=0;i<4;i++)//前后左右 {int nn=x.n;int ll=x.l+dre[i].dl;int rr=x.r+dre[i].dr;if(ll<l&&ll>=0&&rr<r&&rr>=0&&!visit[nn][ll][rr]&&s[x.n][ll][rr]!='x')//判断是否合法 {struct node y=x;y.step++;y.l=ll;y.r=rr;visit[nn][ll][rr]=1;q.push(y);}}if(s[x.n][x.l][x.r]=='U'&&s[x.n+1][x.l][x.r]!='x'&&!visit[x.n+1][x.l][x.r])//上楼 {struct node y=x;y.n++;y.step++;visit[y.n][y.l][y.r]=1;q.push(y);}else if(s[x.n][x.l][x.r]=='D'&&s[x.n-1][x.l][x.r]!='x'&&!visit[x.n-1][x.l][x.r])//下楼 {struct node y=x;y.n--;y.step++;visit[y.n][y.l][y.r]=1;q.push(y);}}return -1;}int main(){int i,j,k,flag=1;char ch;scanf("%d%d%d",&n,&l,&r);memset(visit,0,sizeof(visit));dre[0].dl=0;//方向数组 dre[0].dr=1;dre[1].dl=1;dre[1].dr=0;dre[2].dl=-1;dre[2].dr=0;dre[3].dl=0;dre[3].dr=-1;for(i=0;i<n;i++){for(j=0;j<l;j++){scanf("%s",s[i][j]);for(k=0;k<r&&flag;k++){if(s[i][j][k]=='X'){start.n=i;start.l=j;start.r=k;start.step=0;flag=0;break;}}}}visit[start.n][start.l][start.r]=1;printf("%d",bfs(start));return 0;}
- 2016 UESTC Training Search Algorithm and StringB - Xiper的奇妙历险(2)(三维迷宫)
- 【Search&String Algorithm Training】Xiper的奇妙历险(2)
- 2016 UESTC Training for Search Algorithm & String A - Xiper的奇妙历险(1) 八皇后问题、dfs
- 【Search&String Algorithm Training】Xiper的奇妙历险(1)
- CDOJ (UESTC OJ) 1380 Xiper的奇妙历险(3)
- B - Xiper的奇妙历险(2)
- UESTC Training for Search Algorithm(总结)
- 2014 UESTC Training for Search Algorithm Problem F 方老师与迷宫
- 2016 UESTC Training for Search Algorithm & String K - 卿大爷的三个女友 KMP、跳转数组
- 2016 UESTC Training for Search Algorithm & String(A B C E I K)
- 2014 UESTC Training for Search Algorithm B
- 2014 UESTC Training for Search Algorithm C
- 2014 UESTC Training for Search Algorithm
- 2014 UESTC Training for Search Algorithm E
- 2014 UESTC Training for Search Algorithm F
- 2014 UESTC Training for Search Algorithm H
- 2014 UESTC Training for Search Algorithm I
- 2014 UESTC Training for Search Algorithm J
- Oracle 后台进程 详细
- C++虚函数与函数的执行顺序
- CodeForces675B RestoringPainting
- JNI
- C初级阶段练习题目(一)
- 2016 UESTC Training Search Algorithm and StringB - Xiper的奇妙历险(2)(三维迷宫)
- C++/CLI托管编程专业名词(部分)
- oracle 后台进程(background process)详解
- 综述:计算机视觉中RNN应用于目标识别
- python编码问题分析
- Java操作字符串--读书笔记
- centos安装oracle 11g 完全图解
- HDU 1056 打表
- BZOJ 1082 二分+广搜