BFS例题:A计划
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。Output如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。Sample Input
- 1
- 5 5 14
- S*#*.
- .#...
- .....
- ****.
- ...#.
- ..*.P
- #.*..
- ***..
- ...*.
- *.#..
Sample Output
- YES
- #include <stdio.h>
- #include <cstring>
- #include <queue>
- using namespace std;
- struct node
- {
- int x,y,floor;
- int step;
- };
- int t,n,m,lim;
- int s[3],e[3];
- int to[4][2] = {1,0,0,1,-1,0,0,-1};
- char map[2][15][15];
- int use[2][15][15];
- int check(int floor,int x,int y)
- {
- if(x<0 || y<0 || x>=n || y>=m)
- return 1;
- if(map[floor][x][y]=='*')
- return 1;
- return 0;
- }
- void BFS()
- {
- memset(use,0,sizeof(use));
- node a,next;
- queue<node> Q;
- int i,j,k;
- a.floor = s[0];
- a.x = s[1];
- a.y = s[2];
- a.step = 0;
- use[s[0]][s[1]][s[2]] = 1;
- Q.push(a);
- while(!Q.empty())
- {
- a = Q.front();
- Q.pop();
- if(a.floor == e[0] && a.x == e[1] && a.y == e[2])
- {
- printf("YES\n");
- return ;
- }
- if(a.step>=lim)
- break;
- for(i = 0; i<4; i++)
- {
- next = a;
- next.x+=to[i][0];
- next.y+=to[i][1];
- next.step++;
- if(check(next.floor,next.x,next.y))
- continue;
- if(use[next.floor][next.x][next.y])
- continue;
- use[next.floor][next.x][next.y] = 1;
- if(map[next.floor][next.x][next.y] == '#')
- {
- next.floor=!next.floor;
- if(check(next.floor,next.x,next.y))
- continue;
- if(use[next.floor][next.x][next.y])
- continue;
- if(map[next.floor][next.x][next.y] == '*' || map[next.floor][next.x][next.y] == '#')
- continue;
- use[next.floor][next.x][next.y] = 1;
- }
- if(next.floor == e[0] && next.x == e[1] && next.y == e[2])
- {
- printf("YES\n");
- return ;
- }
- Q.push(next);
- }
- }
- printf("NO\n");
- }
- int main()
- {
- int i,j,k;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d%d%d",&n,&m,&lim);
- for(int k=0;k<2;k++)
- {
- for(i=0;i<n;i++)
- {
- scanf("%s",map[k][i]);
- for(j = 0; j<m; j++)
- {
- if(map[k][i][j] == 'S')
- {
- s[0] = k,s[1] = i,s[2] = j;
- }
- else if(map[k][i][j] == 'P')
- {
- e[0] = k,e[1] = i,e[2] = j;
- }
- }
- }
- }
- BFS();
- }
- return 0;
- }
{"safe":true,"sections":[{"title":"","value":{"format":"HTML","content":"\u003cscript type\u003d\u0027text/x-mathjax-config\u0027\u003eMathJax.Hub.Config({tex2jax: { inlineMath: [[\u0027$\u0027,\u0027$\u0027],[\u0027\\[\u0027,\u0027\\]\u0027]] } }); \u003c/script\u003e\n\u003cscript type\u003d\u0027text/javascript\u0027 src\u003d\u0027https://cdn.mathjax.org/mathjax/latest/MathJax.js?config\u003dTeX-AMS-MML_HTMLorMML\u0027\u003e\u003c/script\u003e\n\u003cscript type\u003d\u0027text/javascript\u0027\u003esetTimeout(function(){MathJax.Hub.Queue([\u0027Typeset\u0027, MathJax.Hub, \u0027left_view\u0027]);}, 2000);\u003c/script\u003e\n\u003cdiv class\u003d\"panel_content\"\u003e\n 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。 \n \u003cbr\u003e现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。 \n\u003c/div\u003e"}},{"title":"Input","value":{"format":"HTML","content":"输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 \u0026lt;\u003d N,M \u0026lt;\u003d10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。"}},{"title":"Output","value":{"format":"HTML","content":"如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。"}},{"title":"Sample Input","value":{"format":"HTML","content":"\u003cpre\u003e1\r\n5 5 14\r\nS*#*.\r\n.#...\r\n.....\r\n****.\r\n...#.\r\n\r\n..*.P\r\n#.*..\r\n***..\r\n...*.\r\n*.#..\u003c/pre\u003e"}},{"title":"Sample Output","value":{"format":"HTML","content":"\u003cpre\u003eYES\u003c/pre\u003e"}},{"title":"Hint","value":{"format":"HTML","content":""}}]}
BFS例题:A计划的更多相关文章
- 洛谷P1135 奇怪的电梯 BFS例题
好,这是一道黄题.几个月前(2017.10.29)的我拿了可怜的20分. 这是当年的蒟蒻代码 #include <cstdio> #include <iostream> #in ...
- ACM/ICPC 之 BFS范例(ZOJ2913-ZOJ1136(POJ1465))
通过几道经典BFS例题阐述BFS思路 ZOJ2913-Bus Pass 题意:找一个center区域,使得center到所有公交线路最短,有等距的center则输出id最小的. 题解:经典的BFS,由 ...
- ZH奶酪:【数据结构与算法】搜索之BFS
1.目标 通过本文,希望可以达到以下目标,当遇到任意问题时,可以: 1.很快建立状态空间: 2.提出一个合理算法: 3.简单估计时空性能: 2.搜索分类 2.1.盲目搜索 按照预定的控制策略进行搜索, ...
- BFS简单迷宫
常见迷宫: 输入迷宫 启点 终点 然后求最短路径 BFS例题 用dist[][]数组来记录 启点到每个点的最短路径 #include <iostream> #include <fst ...
- 浅谈bfs
广搜(bfs) 定义 广度优先算法,简称BFS.是一种图形搜索演算法,简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点,如果发现目标,终止. 与dfs的相似之处与不同 结合深搜理解 相同点:都 ...
- [知识点]Tarjan算法
// 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html UPD ...
- 正睿OI国庆DAY2:图论专题
正睿OI国庆DAY2:图论专题 dfs/例题 判断无向图之间是否存在至少三条点不相交的简单路径 一个想法是最大流(后来说可以做,但是是多项式时间做法 旁边GavinZheng神仙在谈最小生成树 陈主力 ...
- 【POJ】3278 Catch That Cow
题目链接:http://poj.org/problem?id=3278 题意:有一头奶牛跑到了K的位置,农夫在N的位置,求最短抓到奶牛的时间. 农夫有两种移动方式. 1.步行:一分钟内从x->x ...
- A计划(bfs)
A计划 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
随机推荐
- PHP保存Base64图片base64_decode的问题
PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码. 编码上,只要将图片流读取到,而后使用base64_encode进行进 ...
- select标签使用 三目运算符
<td> <select id="roleName" name="roleName" class="input" styl ...
- 【Angular JS】网站使用社会化评论插件,以及过程中碰到的坑
目前正在开发自己的网站,技术上使用Angular JS + Express JS + Mongo DB.由于网站会有文章发布,因此需要有评论功能.评论功能也可以自己开发,但由于现在社会化评论插件很多, ...
- python模块详解 re
摘自:python中的正则表达式(re模块) 一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被 ...
- Maven 私有库和本地库的安装与配置 Sonatype Nexus + Maven
环境:CentOS 7.0 Final.JDK8.Sonatype Nexus.Maven 虚拟机模拟IP:192.168.16.167 备注:root权限用户操作 前提:已安装 JDK8 并配置好了 ...
- sharepoint知识点总结
{ users.Add(value.User); } else { SPGroup group = web.Groups.GetByID(value.LookupId); groups.Add(gro ...
- 视频会议20方100点 v2.66.1.18
平台: Windows 类型: 虚拟机镜像 软件包: 视频会议服务器( Video Conference Server ) 20-party video conference business int ...
- win2008 配置TLS1.2
配置TLS1.2 提供两种方法, 选择其中一种就行了 1.手动设置 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProv ...
- Altium_Designer-PCB中各层作用详解
一直以来,对PCB中各层,比如:solder层.paste层.Top overlay层等等这些一知半解.今天仔细看了下,向大家介绍一下,有不对的地方还请指正. 1.mechanical机械层是定义整个 ...
- Java中调用MatLab返回值
当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N ...