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;}
阅读全文
0 0
- sdut 3929 魔戒
- SDUT 3929 魔戒
- SDUT 3929 校赛 D 魔戒
- 魔戒
- 魔戒
- 魔戒
- 魔戒
- 魔戒
- SDUT 校赛 D题 魔戒(bfs+四维数组)
- 魔戒咕噜
- 看到魔戒的花絮
- 魔戒中超眩的武器装备!
- 魔戒(四维bfs)
- 魔戒-BFS求最短路
- 第八届ACM校赛->魔戒
- 魔戒 4维bfs搜索
- 冲杀职场的10只魔戒
- 冲杀职场的10只魔戒
- 王卓然教授谈“论文写作那些事”
- CocoaAsyncSocket
- Java 运算符
- 输入开始时间和工作天数,计算结束时间,需考虑节假日周末和调休
- 视频编码标准H.264/AVC
- sdut 3929 魔戒
- 有序广播和无序广播
- mongodb数据迁移,快速方法
- UML类图中箭头和线条的含义和用法
- git版本回退
- Spring事务管理的一次Bug调试
- 输入某年某月某日,判断这一天是这一年的第几天?
- 学习2:ROS工作目录的搭建
- 常用正则表达