NYOJ 353 3D dungeon 【bfs】
题意:给你一个高L长R宽C的图形。每个坐标都能够视为一个方格。你一次能够向上。下。左,右,前,后任一方向移动一个方格, 可是不能向有#标记的方格移动。
问:从S出发能不能到达E,假设能请输出最少的移动次数。
策略:简单的深搜。
注意:由于是求最少的移动次数。所以要从全部能到达的中选出最少的。
代码:
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
char map[35][35][35];
int ans, l, r, c;
const int dirx[6] = {1, -1, 0, 0, 0, 0};
const int diry[6] = {0, 0, 1, -1, 0, 0};
const int dirz[6] = {0, 0, 0, 0, 1, -1};
struct node{int x, y, z;int step;
};
node st, en;
queue<node > q;
char s[10000];
bool vis[35][35][35];int limit(node s){return (s.x<l&&s.x>=0&&s.y>=0&&s.y<r&&s.z>=0&&s.z<c&&map[s.x][s.y][s.z] != '#');
}int match(node s){if(s.x==en.x&&s.y==en.y&&s.z==en.z) return 1;else return 0;
}
void bfs(){memset(vis, 0, sizeof(vis));ans = INF; //初始化最大int i;q.push(st);//map[st.x][st.y][st.z] = '#';vis[st.x][st.y][st.z] = 1;while(!q.empty()){node temp = q.front();for(i = 0; i < 6; i ++){node temp2;temp2.x = temp.x+dirx[i];temp2.y = temp.y+diry[i];temp2.z = temp.z+dirz[i];temp2.step = temp.step+1;//printf("%d %d %d %d..", temp2.x, temp2.y, temp2.z, temp2.step);if(limit(temp2)&&!vis[temp2.x][temp2.y][temp2.z]){if(match(temp2)){ans = ans<temp2.step?
ans:temp2.step; //要bfs完所有的 } else{ q.push(temp2); vis[temp2.x][temp2.y][temp2.z] = 1; } } } // if(ans) break; q.pop(); } if(ans == INF) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n", ans); } int main(){ int i, j, k; while(scanf("%d%d%d", &l, &r, &c), l||r||c){ memset(map, 0, sizeof(map)); for(i = 0; i < l; i ++){ for(j = 0; j < r; j ++){ scanf("%s", map[i][j]); for(k = 0; k <c; k ++){ if(map[i][j][k] == 'S'){ st.x = i; st.y = j; st.z = k; st.step = 0; } if(map[i][j][k] == 'E'){ en.x =i; en.y = j; en.z = k; en.step = 0; } } } gets(s); } bfs(); } return 0; }
NYOJ 353 3D dungeon 【bfs】相关推荐
- nyoj 284 坦克大战【bfs】
坦克大战 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" i ...
- NYOJ 58 步数最少 【BFS】
意甲冠军:不解释. 策略:如果: 这个问题也可以用深宽搜索搜索中使用.我曾经写过,使用深层搜索.最近的学校范围内的搜索,拿这个问题来试试你的手. 代码: #include<stdio.h> ...
- 【BFS】魔板(c++基础算法)
本专栏上一篇:[BFS]八数码问题(c++基础算法) 目录 一.读题 ①题面 ②题意 三.做题 ①算法原理 ②算法实现 Ⅰ三种基本操作 Ⅱ操作序列 Ⅲ输出 Ⅳ一个特殊情况 四.AC代码 最后 一.读题 ...
- POJ 3414 Pots【BFS】+ Python
原题链接: 3414 -- Pots 参考资料:POJ 3414 - Pots | 眈眈探求 POJ 3414 Pots[BFS][图搜] - it610.com 一 特别注意: 1. 每一种操作对应 ...
- GJM:Unity开发HTC vive 三、远处拖动3D物体 【转载】
腾讯GAD 窗间风月 原文URL : http://gad.qq.com/article/detail/7192223 版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 在项目中会需要拖动远处的 ...
- 【枚举】【二分答案】【分块答案】【BFS】【最大流】【Dinic】bzoj1189 [HNOI2007]紧急疏散evacuate...
[法一]枚举Time(0~N*M): S->'.'(1); 'D'->T(Time); '.'->'D'(dis(用BFS预处理,注意一旦到达'D',BFS就不能继续扩展了,注意di ...
- 用平面图片制作3D模型【3DsMax】
01 先在网上找一张简单的素材图片,如图所示.(图片最好背景颜色和图形颜色2种颜色) 02 用AI软件打开素材图片,如图所示. 03 在点[对象]菜单中,点[图像描摹],选择[建立并扩展],如图所示. ...
- 3D dungeon(BFS)
描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of ...
- [kuangbin]专题二 搜索进阶 Escape HDU - 3533【BFS】
[题目描述] The students of the HEU are maneuvering for their military training. The red army and the blu ...
最新文章
- springboot整合mybatis和mybatis-plus
- 如何成为一个合格的项目经理?
- uClinux下移植Ne2000兼容的网卡驱动程序(转)
- 信用逾期3年是不是一定会坐牢?
- 观察者模式和js自定义事件
- Redis缓存安装Version5.0.7
- PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.4. 日志传送的替代方法...
- 如何使用SubtitleWorkshop制作字幕
- jdbc mysql wait_timeout_MySql wait_timeout问题解决办法。
- Windows下C++多线程同步与互斥简单运用-转
- linux 下运行 jar包 java.lang.ClassNotFoundException: 解决办法
- 设计模式C++学习笔记之三(Singleton单例模式)
- Tensor Flow量化里representative_dataset参数是什么意思?
- poj 2096 Collecting Bugs 概率dp入门题
- 操作系统 读者-写者问题
- 零件测绘与计算机作图理论试题,浅谈《零部件测绘与cad成图技术》技能竞赛对中职机械制图和cad制图课程整合的影响...
- 无线专题 路由器和交换机、光猫的区别
- Eclipse新建Android项目报错解决方案详细汇总
- 业界关注中药创新 古典名方目录急盼出台
- k8s cpu 和内存资源说明
热门文章
- Flask框架从入门到精通之转换器(四)
- MySQL的binlog_row_image
- javascript中async await的用法
- 【行业看点】量子通信 量子计算机 量子列车…… 量子的世界究竟多精彩?
- Android开发实践:如何设置NDK的编译选项
- Mysql Cluster节点类型
- 十大开源的.NET用户界面框架 让GUI设计不再犯难
- 2.3 CMMI2级——项目跟踪和控制(Project Monitoring and Control)
- 【转】北京四中学习方法
- Writing a FilterUnloadCallback Routine for a Minifilter Driver 为一个微过滤驱动写一个过滤器卸载回调例程...