魔戒

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

1
3

“师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛

裸的bfs水题,只是维数从二维变成四维而已,其它的都和二维一样

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <string.h>
#include <queue>
using namespace std;
int area[35][35][35][35],vis[35][35][35][35];
int x,y,z,w,sx,sy,sz,sw,ex,ey,ez,ew;
struct Node
{int x,y,z,w,step;Node(int x,int y,int z,int w,int s):x(x),y(y),z(z),w(w),step(s){};};int dir[8][4]={{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{-1,0,0,0},{0,-1,0,0},{0,0,-1,0},{0,0,0,-1}};int check(int dx,int dy,int dz,int dw)
{if (dx<0||dx>=x||dy<0||dy>=y||dz<0||dz>=z||dw<0||dw>=w)return 0;else return 1;
}
int bfs()
{Node tmp(sx,sy,sz,sw,0);queue<Node> que;que.push(tmp);vis[tmp.x][tmp.y][tmp.z][tmp.w]=tmp.step;while(!que.empty()){tmp=que.front();que.pop();for (int ijk=0;ijk<8;ijk++){int dx=tmp.x+dir[ijk][0];int dy=tmp.y+dir[ijk][1];int dz=tmp.z+dir[ijk][2];int dw=tmp.w+dir[ijk][3];if (check(dx,dy,dz,dw)==0||area[dx][dy][dz][dw]==1)continue;if (dx==ex&&dy==ey&&dz==ez&&dw==ew)return tmp.step+1;if (vis[dx][dy][dz][dw]!=0&&vis[dx][dy][dz][dw]<=tmp.step+1)continue;vis[dx][dy][dz][dw]=tmp.step+1;Node aaa(dx,dy,dz,dw,tmp.step+1);que.push(aaa);}}return -1;
}
int main()
{while(scanf("%d%d%d%d",&x,&y,&z,&w)!=EOF){char tmp;memset(area,0,sizeof(area));memset(vis,0,sizeof(vis));for (int i=0;i<x;i++)for (int j=0;j<y;j++)for (int k=0;k<z;k++)for (int l=0;l<w;l++){cin>>tmp;if (tmp=='#')area[i][j][k][l]=1;else if (tmp=='S'){sx=i;sy=j;sz=k;sw=l;}else if (tmp=='E'){ex=i;ey=j;ez=k;ew=l;}}int ans=bfs();if (ans!=-1)printf("%d\n",ans);else printf("WTF\n");}return 0;
}/***************************************************
Result: Accepted
Take time: 576ms
Take Memory: 2092KB
Submit time: 2017-06-04 15:20:48
****************************************************/

魔戒 4维bfs搜索相关推荐

  1. 魔戒(思维+bfs)

    Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体--魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E&quo ...

  2. hiho_1139_二分+bfs搜索

    题目 给定N个点和M条边,从点1出发,到达点T.寻找路径上边的个数小于等于K的路径,求出所有满足条件的路径中最长边长度的最小值.  题目链接:二分      最小化最大值,考虑采用二分搜索.对所有的边 ...

  3. SDUT--Pots(二维BFS)

    Pots Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 You are given two pots, having the ...

  4. PHP 多维数组搜索 PHP multi dimensional array search

    array_column() 返回input数组中键值为column_key的列, 如果指定了可选参数index_key,那么input数组中的这一列的值将作为返回数组中对应值的键. 参数 input ...

  5. java灌水bfs二叉树,二叉树的BFS搜索

    本人需要阅读代码,如果觉得阅读困难可以一步到CSDN 代码中涉及到的通过先序遍历和中序遍历生成一条二叉树的算法,在本人的另一篇博客通过树的中序和先序遍历生成二叉树中进行了详细讲解. 广度优先搜索算法( ...

  6. 4. 对称飞行器 -- BFS搜索

    对称飞行器 小强在玩一个走迷宫的游戏,他操控的人物现在位于迷宫的起点,他的目标是尽快的到达终点. 每一次他可以选择花费一个时间单位向上或向下或向左或向右走一格,或是使用自己的对称飞行器花费一个时间单位 ...

  7. 【CCCC】L3-008 喊山 (30分),BFS搜索最长路,水题

    problem L3-008 喊山 (30分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中 ...

  8. HDU - 2612 Find a way(BFS搜索)

    题目: 链接 思路: 用BFS分别以'Y'和'M'的位置为起点进行两次搜索,并把这两次的搜索结果在一个二维数组中保存下来,在对地图遍历遇到'@'更行最小值. PS: 如果用'Y'和'M'点分别去搜每个 ...

  9. c++ bfs搜索详讲

    文章目录 一.bfs是什么? 二.bfs怎么用? bfs模板 简单例题1 中等例题2 高等例题3 总结 一.bfs是什么? bfs,广度搜索优先,是层序遍历的一种使用 一般用来求没有边权的情况下的最短 ...

最新文章

  1. MyBatis之传入参数——parameterType
  2. 微软资深软件工程师:阅读代码真的很难
  3. 编写高质量代码:改善Java的151个建议五(类、对象、方法)31-51
  4. Caffe:solver及其配置
  5. 深入JavaScript与.NET Framework中的日期时间(1):基本概念与概述
  6. Git之深入解析如何在应用中嵌入Git
  7. MyBatis Generator配置文件翻译
  8. ScheduledThreadPoolExecutor定时任务线程池
  9. PCIe to AXI Translation——PCIe 内存空间到AXI内存空间的转换
  10. Android ScrollView
  11. ACM题目————STL练习之众数问题
  12. 凸包算法(convex hull)
  13. windows批处理bat脚本实现微信告警——监控系统WGCLOUD
  14. Word文件标尺工具不见了,怎么恢复
  15. matlab闭环直流调速系统实验,实验三双闭环直流调速系统MATLAB仿真.doc
  16. 配置javaw.exe双击运行jar包
  17. php 时间 增加天数,php实现当前时间加天数的方法
  18. PDF报表 项目实战总结(集成百度地图+遇到的问题)
  19. ROS中处理回调数据
  20. Unity中的矩阵Matrix

热门文章

  1. 滴滴java开发面试题_滴滴出行(小桔科技)亲身面试经验分享,java开发岗
  2. 鸿蒙os流畅性,全球首批!升级使用鸿蒙OS真实反馈评价出炉:“差评好评“都很真实...
  3. 会计 金融管理 计算机网络技术,天津海运职业学院专业排名,招生专业目录(10篇)...
  4. Netty学习(一):初识Netty
  5. cad画图要求计算机最低配置,AutoCAD电脑配置要求:AutoCAD LT 2022 系统要求
  6. 腾讯云 AI 视觉产品基于流计算 Oceanus(Flink)的计费数据去重尝试
  7. JAVA获取GMT毫秒_关于java:如何获得GMT当前时间?
  8. 诗经 - 小雅 - 菁菁者莪
  9. 考华为HCIE认证的过程?及前景如何?
  10. 河北省计算机三级报考人数已满,保定应届生研究生报名考点人数已满 紧急求助...