POJ 2251 Dungeon Master

来源:互联网 发布:唐小僧 坚持以数据和 编辑:程序博客网 时间:2024/04/29 16:01

一个立体空间, 输入三个数,L,R,C,代表有L个平面,R行,C列,.代表可以走,#代表不能走,S代表开始点,E代表结束点,问从S开始走,对每个位置,有六个走法,即空间的六个方向的走法(上下东南西北),一分钟可以走一个点,问从S走到E点,最少可以经过多少分钟,若不能到达,则输出Trapped!

一个三维BFS,一开始直接利用vis数组记录到达当前点的最短时间,不过MLE了,后来改成vis记录是否走过便过了,不解。

#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <list>#include <queue>#include <map>using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-4#define maxn 1000010#define MOD 1000000007char s[33][33][33];int vis[33][33][33],l,r,c;int sx,sy,sz;int mx[6] = {0,0,0,0,1,-1};int my[6] = {0,0,1,-1,0,0};int mz[6] = {1,-1,0,0,0,0};struct node{    int x,y,z,t;}st,ss;void bfs(){    queue<node> q;    vis[sx][sy][sz] = 0;    st.x = sx;    st.y = sy;    st.z = sz;    //st.t = 0;    q.push(st);    while(!q.empty())    {        st = q.front();        q.pop();        if(s[st.x][st.y][st.z] == 'E')        {            printf("Escaped in %d minute(s).\n",vis[st.x][st.y][st.z]);            return;        }        //printf("%d %d %d\n",st.x,st.y,st.z);        for(int i = 0; i < 6; i++)        {            int dx = st.x + mx[i];            int dy = st.y + my[i];            int dz = st.z + mz[i];            if(dx < 0 || dx >= l || dy < 0 || dy >= r || dz < 0 || dz >= c)                continue;            if(s[dx][dy][dz] == '#' || vis[dx][dy][dz] < vis[st.x][st.y][st.z] + 1)                continue;            vis[dx][dy][dz] = vis[st.x][st.y][st.z] + 1;            ss.x = dx;            ss.y = dy;            ss.z = dz;            //ss.t = st.t + 1;            q.push(ss);        }    }    printf("Trapped!\n");}int main(){    int t;    while(scanf("%d%d%d",&l,&r,&c) && (l+r+c))    {        for(int i = 0; i < l; i++)            for(int j = 0; j < r; j++)                scanf("%s",s[i][j]);        for(int i = 0; i < l; i++)            for(int j = 0; j < r; j++)            for(int k = 0; k < c; k++)        {            if(s[i][j][k] == 'S')            {                sx = i;                sy = j;                sz = k;            }            vis[i][j][k] = 100000;        }        bfs();    }    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机多媒体没有声音怎么办 漫画人已屏蔽怎么办 自考科目停考怎么办 二年级法制小报怎么办 机动车异地年检委托书怎么办 签了委托书反悔怎么办 签了空白委托书怎么办 说我人品不好怎么办 对于插队的人怎么办 与领导发生矛盾怎么办 老员工不服从管理怎么办 与顾客发生争执怎么办 同事之间闹矛盾怎么办 和员工发生争执怎么办 被员工威胁恐吓怎么办 员工拿离职威胁怎么办 员工跟顾客吵架怎么办 和朋友发生争执怎么办 和领导吵架后怎么办 老板不尊重员工怎么办 上司不尊重我怎么办 下属不尊重老板怎么办 战地4开挂被ban怎么办 照相的单词怎么办写 gmdss证书已经过期怎么办 脾气太火爆了怎么办 满月宝宝脾气急怎么办 多颗牙齿缺失怎么办 孩子没有学习动力怎么办 裤子穿着往上跑怎么办 伤囗发炎了怎么办 玩派派背包食物不足怎么办 80岁老人植物人怎么办 steam账户创不起怎么办 小孩读书没有居住证怎么办 小孩上学没有准生证怎么办 小学在外地初中怎么办 小孩上学没准生证怎么办 没结婚出生证明怎么办 异地上高中高考怎么办 高中去外地上学怎么办