SDUT 校赛 D题 魔戒(bfs+四维数组)
魔戒
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
分析:
又一次验证了A题不用懂题意
#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
int A,B,C,D;
char map[55][55][55][55];
int vis[55][55][55][55];
int dirx[]={0,0,0,0,0,0,1,-1};
int diry[]={0,0,0,0,1,-1,0,0};
int dirz[]={0,0,1,-1,0,0,0,0};
int dirw[]={1,-1,0,0,0,0,0,0};
int flag;
int aa,bb,cc,dd;
struct node{ int x; int y; int z;int w; int step;
};
int judge(int x,int y,int z,int w){ if (x>=0&&x<A&&y>=0&&y<B&&z>=0&&z<C&&w>=0&&w<D&&vis[x][y][z][w]==0&&map[x][y][z][w]!='#') return 1; return 0;
}
void bfs(int aa,int bb,int cc,int dd){ queue<node>Q; node a; a.x=aa; a.y=bb; a.z=cc; a.w=dd;a.step=0; vis[aa][bb][cc][dd]=1; Q.push(a); flag=1; while (!Q.empty()){ a=Q.front(); Q.pop(); if (map[a.x][a.y][a.z][a.w]=='E'){ printf ("%d\n",a.step); flag=0; break; } for (int i=0;i<8;i++){ node b; b=a; b.x+=dirx[i]; b.y+=diry[i]; b.z+=dirz[i]; b.w+=dirw[i];if (judge(b.x,b.y,b.z,b.w)){ b.step++; vis[b.x][b.y][b.z][b.w]=1; Q.push(b); } } } if (flag)printf ("WTF\n");
}
int main (){ while(scanf ("%d%d%d%d",&A,&B,&C,&D)!=EOF){getchar();for (int i=0;i<A;i++){ for (int j=0;j<B;j++){ for (int k=0;k<C;k++){ for(int l=0;l<D;l++){scanf ("%c",&map[i][j][k][l]); if (map[i][j][k][l]=='S'){aa=i;bb=j;cc=k;dd=l;}}getchar();} } } memset(vis,0,sizeof(vis)); bfs(aa,bb,cc,dd); }return 0;
}
SDUT 校赛 D题 魔戒(bfs+四维数组)相关推荐
- 武理校赛A题 ljw的剥削(思维 + map应用)
武理校赛A题 ljw的剥削(思维 + map应用) 牛客链接 题意: 给定 a[],b[] 两个长度同为 n 的数组,经过一系列操作后, 使 p = ∑ i = 1 n m a x ( ( a i − ...
- 2019第十届蓝桥杯B组C++省赛E题迷宫--BFS(倒搜)
试题 E: 迷宫 本题总分:15 分 [问题描述] 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方. 010000 000100 001001 110000 迷宫 ...
- 2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)
1 /* 2 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 3 以前做过的都是用二维的!自己的四维还是太狭隘了..... 4 5 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找 ...
- 魔戒(BFS+四维数组)
Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体–魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E" ...
- M - 魔戒(BFS+四维数组)
Description 蓝色空间号和万有引力号进入了四维水洼,发现了四维物体–魔戒. 这里我们把飞船和魔戒都抽象为四维空间中的一个点,分别标为 "S" 和 "E" ...
- 2015北京网络赛 G题 Boxes bfs
Boxes Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingonl ...
- QAU 18校赛 J题 天平(01背包 判断能否装满)
问题 J: 天平 时间限制: 1 Sec 内存限制: 128 MB 提交: 36 解决: 9 [提交][状态][讨论版][命题人:admin] 题目描述 天平的右端放着一件重量为w的物品.现在有n ...
- 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛E题小Y吃苹果
链接:https://www.nowcoder.com/acm/contest/91/E 题意: 小Y买了很多苹果,但他很贪吃,过了几天一下就吃剩一只了.每一天小Y会数出自己的苹果个数X,如果X是偶数 ...
- 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛H题小Y与多米诺骨牌(线段树优化dp)
题意 题目链接:https://www.nowcoder.com/acm/contest/91/H 来源:牛客网 题解 设l[i]l[i]l[i]为向左推第iii个骨牌最远能影响到的骨牌的编号,r[i ...
最新文章
- ios 8+ (xcode 6.0 +)应用程序Ad Hoc 发布前多设备测试流程详解
- 图像基本处理算法的简单实现(二)
- java代码实现解压文件_Java压缩/解压文件的实现代码
- asurerp可以导出php文件吗,编译前的准备 - PHP 扩展开发及内核应用相关内容 - UDN开源文档...
- 《软件需求分析(第二版)》第 16 章——需求链中的联系链 重点部分总结
- 论文 | 港中文自动驾驶点云上采样方法
- Enum,Int,String的互相转换 枚举转换
- 全球芯片短缺将持续到2022年 GPU备货将受影响?
- Java 数据库编程 ResultSet 的 使用方法
- 仅用18天,英伟达新型GAN合成真假难辨高清明星脸
- Pytext支持分布式训练,Facebook AI基于PyTorch的NLP框架,简化部署流程
- 各种经典java小游戏_Java是这个世界上最好的语言!
- 【讲座预告】Processing Learner Texts: from Annotation to ...
- 在具有内置文本扩展功能的苹果Mac上如何更快的键入内容?
- sourcetree向github推送代码提示密码错误
- nginx 配置外网域名跳转到内网地址加端口的教程
- IDEA社区版利用maven创建web
- 用Excel或WPS做两独立样本的T检验
- linux socket msg oob,利用OOB查找socket 下
- 一个简单的sql查询脚本