hdu1240题解与思考 Asteroids!
hdu1240题解与思考 Asteroids!
题意:
简单说就是走一个三维的迷宫思路:
解决迷宫的思路当然就是队列+bfs啦,三位迷宫只要注意改一下检测数组vis为三位数组就可以了,当然这个题目也有一个坑点:输入迷宫时不是按照我们的惯性思维先行后列再层,要结合题意。当然也有一些格式方面的要注意。代码奉上:
#include<iostream>
#include<queue>
#include<string>
using namespace std;struct node {int x;int y;int z;int step;
};
//node operate[6] = {// {0,0,1}, //上
// {0,0,-1}, //下
// {0,-1,0}, //左
// {0,1,0}, //右
// {1,0,0}, //前
// {-1,0,0} //后
//};
bool vis[100][100][100];
char a[100][100][100];
int n;bool CHECK(int x, int y, int z) { return x > -1 && x<n&& y>-1 && y < n&& z>-1 && z < n; }
void Way(int dx,int dy,int dz,int tx,int ty,int tz) {node orign;orign.x = dx;orign.y = dy;orign.z = dz;orign.step = 0;queue<node> q;q.push(orign);while (!q.empty()) {node front = q.front();node next;if (front.x == tx && front.y == ty && front.z == tz) {cout << n<<" "<<front.step << endl;return;}for (int i = 0; i < 6; i++) {if (i == 0) {next.x = front.x + 0;next.y = front.y + 0;next.z = front.z + 1;if (CHECK(next.x,next.y,next.z)&&!vis[next.x][next.y][next.z] && a[next.x][next.y][next.z] != 'X') {next.step = front.step + 1;q.push(next);vis[next.x][next.y][next.z] = true;}}if (i == 1) {next.x = front.x + 0;next.y = front.y + 0;next.z = front.z - 1;if (CHECK(next.x, next.y, next.z) && !vis[next.x][next.y][next.z] && a[next.x][next.y][next.z] != 'X') {next.step = front.step + 1;q.push(next);vis[next.x][next.y][next.z] = true;}}if (i == 2) {next.x = front.x + 0;next.y = front.y - 1;next.z = front.z + 0;if (CHECK(next.x, next.y, next.z) && !vis[next.x][next.y][next.z] && a[next.x][next.y][next.z] != 'X') {next.step = front.step + 1;q.push(next);vis[next.x][next.y][next.z] = true;}}if (i == 3) {next.x = front.x + 0;next.y = front.y + 1;next.z = front.z + 0;if (CHECK(next.x, next.y, next.z) && !vis[next.x][next.y][next.z] && a[next.x][next.y][next.z] != 'X') {next.step = front.step + 1;q.push(next);vis[next.x][next.y][next.z] = true;}}if (i == 4) {next.x = front.x + 1;next.y = front.y + 0;next.z = front.z + 0;if (CHECK(next.x, next.y, next.z) && !vis[next.x][next.y][next.z] && a[next.x][next.y][next.z] != 'X') {next.step = front.step + 1;q.push(next);vis[next.x][next.y][next.z] = true;}}if (i == 5) {next.x = front.x - 1;next.y = front.y + 0;next.z = front.z + 0;if (CHECK(next.x, next.y, next.z) && !vis[next.x][next.y][next.z] && a[next.x][next.y][next.z] != 'X') {next.step = front.step + 1;q.push(next);vis[next.x][next.y][next.z] = true;}}}q.pop();}cout << "NO ROUTE" << endl;
}int main() {int dx, dy, dz,tx,ty,tz;string s1, s2;while (cin >>s1>> n) {memset(vis, false, sizeof(vis));for(int k = 0; k < n; k++) { //注意此处根据题意(样例),要把每行每列输完再每层for (int i = 0; i < n; i++) {for (int j = 0; j < n;j++) {cin >> a[i][j][k];}}}cin >> dx >> dy >> dz;cin >> tx >> ty >> tz;cin >> s2;Way(dx, dy, dz, tx, ty, tz);}return 0;
}
AC!
hdu1240题解与思考 Asteroids!相关推荐
- ctf php 流量分析题,GKCTF EZWEB的分析题解和思考
GKCTF EZ三剑客-EzWeb 看到这个题前端和我自己出的一个题实在是很像,同样是输入一个url,先看题目长啥样吧. 嗯,啥也没有,输入url基本没反应,F12给的提示是?secret,输入后发现 ...
- 关于acm素数题解的思考
本来今天晚上大家带出来是要复习金工实习的,明天上机考试.思来无聊打算做点acm的题.相信每一个学过编程的都会觉得求一个数是否是素数是很简单的,我们当然可以按照定义让机器自己跑来识别,但是有效率更高的算 ...
- 科普 | 浅谈基因检测
"那开始了吧!" "首先,直奔主题. 什么是基因检测? 基因检测是一种医学检测,即检测你的基因型或者基因是有没有发生异常. Over!" "完了?&q ...
- 算法题-----题目、题解、个人算法、个人思考
算法题-----题目.题解.个人算法.个人思考,项目说明]这里记录算法题目,这里记录:算法题目简单描述,暂存对于这道题的SK_cache(自己的卡点.自己的思路.自己对这道题的理解,自己的疑问.自己对 ...
- 算法-------三角形最小路径和(Java版本)
题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点.例如,给定三 ...
- NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」
建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...
- 最短Hamilton路径(位运算基本思路)
题目描述 给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次 ...
- [CQOI2009]循环赛[HNOI2013]比赛
[CQOI2009]循环赛&&[HNOI2013]比赛--真是好题(差点没把我脑子烧坏-sd的无奈) 提前声明:感谢大佬看了他的题解后,我才恍然大悟 -好,先上题目 [CQOI2009 ...
- 2019 Multi-University Training Contest 9 1007 Rikka with Travels
HDU 6686 Rikka with Travels 题意: 在一颗树上选择两条不相交的路径的可能性有多少,路径长度定义为路径的顶点数. 题解: 初步思考,观察样例可以发现,求的是两条路径的有序对, ...
最新文章
- keras Classifier 分类
- 使用Visual Studio Code 运行ROS
- 一次mysql大数据量查询 慢查询导致服务阻塞后的学习
- 前端怎么画三角形_前端小技巧:边框写三角形
- 判断ip地址的合法性python_使用Python判断IP地址合法性的方法实例
- python计算夏令时的具体日期,python time.time()和“夏令时”;
- 用云计算机,云计算在生活中的应用
- 让Google chrome支持迅雷
- 2019年互联网寒冬,带你走进真实的面试杀出重围
- 让计算机网络与作文教学,“基于计算机和网络环境下的写作教学研究”课题组 2015-2016学年度上学期研究计划...
- 解决VC中编译出现”SHSQ.dll This required file cannot be loaded. Please re-install Microsoft Visual C++“方法之一
- EGPU use in NUC about ubuntu20.04.5
- 关于ASTER L1T产品介绍及预处理流程
- New Bing/电脑端/ 免梯子 插件教程
- iphone6s 计算机算次方,你一定不能错过的8个iphone使用技巧(纯干货)
- 腾讯WiFi管家手机无线上网免费下载安装
- Halcon2019软件安装教程
- macOS系统下载和配置git教程
- 编译原理学习(到LL1文法部分)
- 知乎日报 Web 版(GoLang 实现)
热门文章
- Java网站安全笔记
- ubuntu下lintel的安装配置
- 【HTML】【休闲益智】还有9块月饼并未获得!请及时出战!(解锁月饼小游戏
- android 基于高德地图的轨迹回放
- Python的pdfminer的字体下载
- 抖音android 语言英语,老师要求用英文介绍一下抖音这款软件求大神支招
- 用线性回归方法计算直线斜率
- Project2010 教程(简约版)
- 概论_第4章__期望的定义和性质
- virtualbox提示错误 不能为虚拟电脑 centos7 打开一个新任务. Unable to load R3 module C:\Program Files\Oracle\Virtual