hdu1240题解与思考 Asteroids!

  1. 题意:
    简单说就是走一个三维的迷宫

  2. 思路:
    解决迷宫的思路当然就是队列+bfs啦,三位迷宫只要注意改一下检测数组vis为三位数组就可以了,当然这个题目也有一个坑点:输入迷宫时不是按照我们的惯性思维先行后列再层,要结合题意。当然也有一些格式方面的要注意。

  3. 代码奉上:

#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!相关推荐

  1. ctf php 流量分析题,GKCTF EZWEB的分析题解和思考

    GKCTF EZ三剑客-EzWeb 看到这个题前端和我自己出的一个题实在是很像,同样是输入一个url,先看题目长啥样吧. 嗯,啥也没有,输入url基本没反应,F12给的提示是?secret,输入后发现 ...

  2. 关于acm素数题解的思考

    本来今天晚上大家带出来是要复习金工实习的,明天上机考试.思来无聊打算做点acm的题.相信每一个学过编程的都会觉得求一个数是否是素数是很简单的,我们当然可以按照定义让机器自己跑来识别,但是有效率更高的算 ...

  3. 科普 | 浅谈基因检测

    "那开始了吧!" "首先,直奔主题. 什么是基因检测? 基因检测是一种医学检测,即检测你的基因型或者基因是有没有发生异常. Over!" "完了?&q ...

  4. 算法题-----题目、题解、个人算法、个人思考

    算法题-----题目.题解.个人算法.个人思考,项目说明]这里记录算法题目,这里记录:算法题目简单描述,暂存对于这道题的SK_cache(自己的卡点.自己的思路.自己对这道题的理解,自己的疑问.自己对 ...

  5. 算法-------三角形最小路径和(Java版本)

    题目 给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点.例如,给定三 ...

  6. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  7. 最短Hamilton路径(位运算基本思路)

    题目描述 给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次 ...

  8. [CQOI2009]循环赛[HNOI2013]比赛

    [CQOI2009]循环赛&&[HNOI2013]比赛--真是好题(差点没把我脑子烧坏-sd的无奈) 提前声明:感谢大佬看了他的题解后,我才恍然大悟 -好,先上题目 [CQOI2009 ...

  9. 2019 Multi-University Training Contest 9 1007 Rikka with Travels

    HDU 6686 Rikka with Travels 题意: 在一颗树上选择两条不相交的路径的可能性有多少,路径长度定义为路径的顶点数. 题解: 初步思考,观察样例可以发现,求的是两条路径的有序对, ...

最新文章

  1. keras Classifier 分类
  2. 使用Visual Studio Code 运行ROS
  3. 一次mysql大数据量查询 慢查询导致服务阻塞后的学习
  4. 前端怎么画三角形_前端小技巧:边框写三角形
  5. 判断ip地址的合法性python_使用Python判断IP地址合法性的方法实例
  6. python计算夏令时的具体日期,python time.time()和“夏令时”;
  7. 用云计算机,云计算在生活中的应用
  8. 让Google chrome支持迅雷
  9. 2019年互联网寒冬,带你走进真实的面试杀出重围
  10. 让计算机网络与作文教学,“基于计算机和网络环境下的写作教学研究”课题组  2015-2016学年度上学期研究计划...
  11. 解决VC中编译出现”SHSQ.dll This required file cannot be loaded. Please re-install Microsoft Visual C++“方法之一
  12. EGPU use in NUC about ubuntu20.04.5
  13. 关于ASTER L1T产品介绍及预处理流程
  14. New Bing/电脑端/ 免梯子 插件教程
  15. iphone6s 计算机算次方,你一定不能错过的8个iphone使用技巧(纯干货)
  16. 腾讯WiFi管家手机无线上网免费下载安装
  17. Halcon2019软件安装教程
  18. macOS系统下载和配置git教程
  19. 编译原理学习(到LL1文法部分)
  20. 知乎日报 Web 版(GoLang 实现)

热门文章

  1. Java网站安全笔记
  2. ubuntu下lintel的安装配置
  3. 【HTML】【休闲益智】还有9块月饼并未获得!请及时出战!(解锁月饼小游戏
  4. android 基于高德地图的轨迹回放
  5. Python的pdfminer的字体下载
  6. 抖音android 语言英语,老师要求用英文介绍一下抖音这款软件求大神支招
  7. 用线性回归方法计算直线斜率
  8. Project2010 教程(简约版)
  9. 概论_第4章__期望的定义和性质
  10. virtualbox提示错误 不能为虚拟电脑 centos7 打开一个新任务. Unable to load R3 module C:\Program Files\Oracle\Virtual