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"(不包括引号)。

Sample Input

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

Sample Output

1
3 不需要知道四维空间的存在形式,经过队友的启发后,明白你只需要从低维度的空间推上来就好了。
一维空间开一维数组;二维空间开二维数组,三维空间开三维数组,所以四维空间开四维数组就好了。
每高一个维度,需要注意方向数组的不同。
 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<stack>
#include<deque>
#include<iostream>
using namespace std;
typedef long long LL;
struct spot{
int x;
int y;
int z;
int w;
LL step;
};
int a,b,c,d;
int con[][][][];
int vis[][][][];
int way[][]={,,,,,,,-,,,,,,,-,,,,,,,-,,,,,,,-,,,};
int judge(int aa,int bb,int cc,int dd)
{
if(aa>=&&aa<a&&bb>=&&bb<b&&cc>=&&cc<c&&dd>=&&dd<d&&vis[aa][bb][cc][dd]==&&con[aa][bb][cc][dd]!='#')
return ;
else
return ; }
void BFS(int aa,int bb,int cc,int dd)
{
int i,p,j;
queue<struct spot> qq;
struct spot head,mid;
int flag=;
head.x=aa;
head.y=bb;
head.z=cc;
head.w=dd;
head.step=;
vis[aa][bb][cc][dd]=;
qq.push(head);
while(!qq.empty())
{
mid=qq.front();
qq.pop();
if(con[mid.x][mid.y][mid.z][mid.w]=='E')
{
flag=;
break;
}
for(i=;i<;i++)
{
struct spot now;
now=mid;
now.x+=way[i][];
now.y+=way[i][];
now.z+=way[i][];
now.w+=way[i][];
if(judge(now.x,now.y,now.z,now.w))
{
now.step++;
vis[now.x][now.y][now.z][now.w]=;
qq.push(now);
}
}
}
if(flag==)
printf("%lld\n",mid.step);
else
printf("WTF\n");
return ;
}
int main()
{
int i,p,j,q;
int aa,bb,cc,dd;
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
for(i=;i<=a-;i++)
for(j=;j<=b-;j++)
for(p=;p<=c-;p++)
for(q=;q<=d-;q++)
{
scanf(" %c",&con[i][j][p][q]);
if(con[i][j][p][q]=='S')
{
aa=i;
bb=j;
cc=p;
dd=q;
}
}
memset(vis,,sizeof(vis));
BFS(aa,bb,cc,dd);
}
return ;
}

SDUT 3929的更多相关文章

  1. 【叉积】【sdut 2508 图形密码】

    图形密码 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

  2. sdut 1592转置矩阵【稀疏矩阵的压缩存储】【快速转置算法】

    转置矩阵 Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sdutoj/proble ...

  3. sdut 2125串结构练习--字符串匹配【两种KMP算法】

    串结构练习——字符串匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sduto ...

  4. sdut 2498【aoe 网上的关键路径】

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2498 代码超时怎么破: #include< ...

  5. sdut 487-3279【哈希查找,sscanf ,map】

    487-3279 Time Limit: 2000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接: sdut:   http://acm.sdut.ed ...

  6. sdut 1465 公共因子

    公共因子 Time Limit: 1000MS Memory limit: 65536K 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?act ...

  7. 排队打饭 sdut 2443【最简单的贪心法应用举例】

    排队打饭 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

  8. sdut 2445 小学数学

    小学数学 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

  9. 最终排名 sdut 2446

    最终排名 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

随机推荐

  1. 可以从Jar外部加载JDBC.properties的Spring-mybatis配置文件

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. Communications link failure--分析之(JDBC的多种超时情况)

    本文是针对特定的情景下的特定错误,不是所有Communications link failure错误都是这个引起的,重要的区分特点是:程序是不是在卡主后两个小时(服务器的设置)后程序才感知到,才抛出了 ...

  3. Fn+F1-F12,避免使用FN+

    用惯了win8.1,再用win10 很不习惯使用FN+F1-F12 如果要避免使用FN+:使用[FN+ESC]

  4. 【ASP.NET Core 】ASP.NET Core 源码学习之 Logging[1]:Introduction

    在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了.而在 ASP.Net Core 中内置了日志系统, ...

  5. jmeter同步定时器

    同步定时器是jmeter中一个比较重要的定时器,同步定时器,相当于一个储蓄池,累积一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起并发,可以用来做大数据量的并发请求. 验证 ...

  6. Python基础数据类型题

    Python基础数据类型 题考试时间:三个小时 满分100分(80分以上包含80分及格)1,简述变量命名规范(3分) 1.必须是字母,数字,下划线的任意组合. 2.不能是数字开头 3.不能是pytho ...

  7. [十七]SpringBoot 之 使用自定义的properties

    Springboot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们应该怎么做呢. 如果继续在application.properties中添加 如: ...

  8. linux硬盘满了问题排查

    关键指令: df du find step1: 如果发现硬盘满了,首先要确定一下,使用df查看硬盘使用情况 df -h step2: 从第一步结果判定满了,确定哪些文件或哪个文件占了大头,使用du指令 ...

  9. 求n!中因子k的个数

    思路: 求n的阶乘某个因子k的个数,如果n比较小,可以直接算出来,但是如果n很大,此时n!超出了数据的表示范围,这种直接求的方法肯定行不通.其实n!可以表示成统一的方式. n!=(km)*(m!)*a ...

  10. 解题:POI 2015 Pieczęć

    题面 发现好像没有什么好做法,那就模拟么=.= 以印章左上角的'x'为基准,记录印章上'x'的相对位置模拟.记录相对位置是因为可能有这种情况↓ 直接模拟是会漏掉的=.= #include<cst ...