sdut 3929 魔戒

来源:互联网 发布:ssh博客系统源码 编辑:程序博客网 时间:2024/04/30 04:02
Time Limit: 1000MS Memory Limit: 65536KB

Problem Description

蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒。

这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E"。空间中可能存在障碍物,标为 "#",其他为可以通过的位置。

现在他们想要尽快到达魔戒进行探索,你能帮他们算出最小时间是最少吗?我们认为飞船每秒只能沿某个坐标轴方向移动一个单位,且不能越出四维空间。

Input

输入数据有多组(数据组数不超过 30),到 EOF 结束。

每组输入 4 个数 x, y, z, w 代表四维空间的尺寸(1 <= x, y, z, w <= 30)。

接下来的空间地图输入按照 x, y, z, w 轴的顺序依次给出,你只要按照下面的坐标关系循环读入即可。

for 0, x-1

    for 0, y-1

        for 0, z-1

            for 0, w-1

保证 S 和 E 唯一。

Output

对于每组数据,输出一行,到达魔戒所需的最短时间。

如果无法到达,输出 "WTF"(不包括引号)。

Example Input

2 2 2 2...S..#.#..E.#..2 2 2 2...S#.##E..##...

Example Output

13

Hint

Author

bLue


这是一个比较简单的bfs题,一共八个方向跑遍bfs就完事了~~

忘写标记数组的我tle到怀疑人生QAQ

#include <iostream>#include <cstdio>#include <queue>using namespace std;int v[99][99][99][99], x, y, z, w;char s[99][99][99][99];typedef struct zb{int x, y, z, w, step;}node;int bfs(int x1, int y1, int z1, int w1){int t = -1;node a, b;queue<node>q;a.x = x1;a.y = y1;a.z = z1;a.w = w1;a.step = 0;q.push(a);v[a.x][a.y][a.z][a.w] = 1;while(!q.empty()){a = q.front();q.pop();if(a.x + 1 < x && !v[a.x + 1][a.y][a.z][a.w] && s[a.x + 1][a.y][a.z][a.w] != '#'){b.x = a.x + 1;b.y = a.y;b.z = a.z;b.w = a.w;b.step = a.step + 1;q.push(b);if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.x - 1 >= 0 && !v[a.x - 1][a.y][a.z][a.w] && s[a.x - 1][a.y][a.z][a.w] != '#'){b.x = a.x - 1;b.y = a.y;b.z = a.z;b.w = a.w;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.y + 1 < y && !v[a.x][a.y + 1][a.z][a.w] && s[a.x][a.y + 1][a.z][a.w] != '#'){b.x = a.x;b.y = a.y + 1;b.z = a.z;b.w = a.w;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.y - 1 >= 0 && !v[a.x][a.y - 1][a.z][a.w] && s[a.x][a.y - 1][a.z][a.w] != '#'){b.x = a.x;b.y = a.y - 1;b.z = a.z;b.w = a.w;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.z + 1 < z && !v[a.x][a.y][a.z + 1][a.w] && s[a.x][a.y][a.z + 1][a.w] != '#'){b.x = a.x;b.y = a.y;b.z = a.z + 1;b.w = a.w;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.z - 1 >= 0 && !v[a.x][a.y][a.z - 1][a.w] && s[a.x][a.y][a.z - 1][a.w] != '#'){b.x = a.x;b.y = a.y;b.z = a.z - 1;b.w = a.w;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.w + 1 < w && !v[a.x][a.y][a.z][a.w + 1] && s[a.x][a.y][a.z][a.w + 1] != '#'){b.x = a.x;b.y = a.y;b.z = a.z;b.w = a.w + 1;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}if(a.w - 1 >= 0 && !v[a.x][a.y][a.z][a.w - 1] && s[a.x][a.y][a.z][a.w - 1] != '#'){b.x = a.x;b.y = a.y;b.z = a.z;b.w = a.w - 1;b.step = a.step + 1;q.push(b);v[b.x][b.y][b.z][b.w] = 1;if(s[b.x][b.y][b.z][b.w] == 'E'){t = b.step;break;}}}return t;}int main(){int i, k, j, l, sum, x1, y1, z1, w1;while(cin>>x>>y>>z>>w){getchar();for(i = 0;i < x;i++){for(j = 0;j < y;j++){for(k = 0;k < z;k++){for(l = 0;l < w;l++){cin>>s[i][j][k][l];v[i][j][k][l] = 0;if(s[i][j][k][l] == 'S'){x1 = i;y1 = j;z1 = k;w1 = l;}}getchar();}}}sum = bfs(x1,y1,z1,w1);if(sum < 0)cout<<"WTF"<<endl;elsecout<<sum<<endl;}return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 过度清洁长痘怎么办 脸上出来痘痘怎么办 眼袋不大有细纹怎么办? 慢性咽炎老咳嗽怎么办 咽炎干咳老不好怎么办 房顶非法鸽子笼子怎么办 鸽子翅膀骨折了怎么办 手被猫爪子破皮怎么办 去台湾用流量怎么办 上吊脖子太痛怎么办 沙发拐角有空调怎么办 报警警察不出警怎么办 驾校合同丢了怎么办 月经弄脏了床单怎么办 半夜到深圳机场怎么办 统计局来公司查怎么办 双离合严重堵车怎么办 健身俱乐部会员要退私教怎么办 感冒做剧烈运动怎么办 雪乐山滑雪怎么办卡 吉林省社保漏保怎么办 时时彩账户冻结怎么办 半夜到天津机场怎么办 小孩吃了避孕药怎么办 太阳能手表停了怎么办 太阳伞架坏了怎么办 通州自行车闪退怎么办? 台球厅生意不好怎么办 被水母咬了怎么办 被告不收判决书怎么办 律师完不成创收怎么办 保险业务员欺骗客户怎么办 德州扑克一样大怎么办 天气热没有空调怎么办 毕业证相片掉了怎么办 环世界肠道蠕虫怎么办 驾校时间过期了怎么办 过度劳累手疼怎么办 工商年检做错了怎么办 工商年检数字证书过期怎么办 工商年检过了怎么办