nyoj 1129 Salvation 模拟
思路:每个坐标有四种状态,每个点对应的每种状态只能走一个方向,如果走到一个重复的状态说明根本不能走到终点,否则继续走即可。
坑点:有可能初始坐标四周都是墙壁,如果不判断下可能会陷入是死循环。
贴上测试数据:
3 3
###
T##
##X
N
AC代码
#include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <utility> #include <string> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> #include <stack> using namespace std; #pragma comment(linker, "/STACK:1024000000,1024000000") #define eps 1e-10 #define inf 0x3f3f3f3f #define PI pair<int, int> typedef long long LL; const int maxn = 100 + 5; int vis[maxn][maxn][4]; char G[maxn][maxn]; int n, m; int dx[] = {-1,0,1,0}; int dy[] = {0,1,0,-1}; char p[] = {'N', 'E', 'S', 'W'}; bool solve(int dir) { memset(vis, 0, sizeof(vis)); int x, y; for(int i = 0; i < n; ++i) for(int j = 0; j < m; ++j) { if(G[i][j] == 'T') { x = i, y = j; break; } } vis[x][y][dir] = 1; while(1) { int flag = 0; for(int i = 3; i < 7; ++i) { int r = (dir + i) % 4; int px = x + dx[r], py = y + dy[r]; if(px < 0 || py < 0 || px >= n || py >= m || G[px][py] == '#') continue; if(vis[px][py][r]) return false; if(G[px][py] == 'X') return true; vis[px][py][r] = 1; x = px, y = py, dir = r; flag = 1; break; } if(!flag) return false; } return false; } int main() { char dir; while(scanf("%d%d", &n, &m) == 2) { for(int i = 0; i < n; ++i) scanf("%s", G[i]); getchar(); scanf("%c", &dir); for(int i = 0; i < 4; ++i) { if(p[i] == dir) { if(solve(i)) printf("YES\n"); else printf("NO\n"); break; } } } return 0; }
如有不当之处欢迎指出!
nyoj 1129 Salvation 模拟的更多相关文章
- nyoj 1129 Salvation
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1129 题目分析:感觉题目说的不是多么的清晰,看了别人的分析觉得,也就是说在一个方向不能拐 ...
- nyoj 1192——Salvation——————【搜索】
Salvation 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 神秘瀑布镇是一个神秘的地方,那里有吸血鬼,狼人,巫师,二重身. Klaus(吸血鬼祖先) 为了利用 ...
- NYOJ 1073 最大值 (模拟)
题目链接 输入N个数,M次查询. 每次查询给出一个数x. 要求:每次查询输出前x个数中第i小的数.(i为第i次查询) 你可以假设M <= N,Xi <= Xi+1 <= Xi+2 & ...
- NYOJ 45 棋盘覆盖 模拟+高精度
题意就不说了,中文题... 小白上讲了棋盘覆盖,于是我就挖了这题来做. 棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下. 公式就是f(k) = f(k - 1) * 4 + 1,再化解下 ...
- NYOJ 题目77 开灯问题(简单模拟)
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 ...
- NYOJ 2356 哈希计划(模拟)
题目链接: http://acm.nyist.me/JudgeOnline/problem.php?id=2356 题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩&l ...
- NYOJ 228 士兵杀敌(五) (模拟)
{题目链接](http://acm.nyist.net/JudgeOnline/problem.php?pid=228) 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为0~M,每次有任务的时候 ...
- nyoj 33-蛇形填数 (循环,模拟)
33-蛇形填数 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:15 submit:38 题目描述: 在n*n方陈里填入1,2,...,n*n,要求填 ...
- nyoj 63-小猴子下落 (模拟)
63-小猴子下落 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:2 submit:5 题目描述: 有一颗二叉树,最大深度为D,且所有叶子的深度都相同 ...
随机推荐
- jQuery Validate验证框架与 jQuery ajaxSubmit的联合使用
jQuery Validate验证框架自定义验证 第一步导入导入js库 <script src="<%=basePath%>static/js/jquery.js" ...
- centos下在php.ini设置时区
错误: PHP Warning: Unknown: It is not safe to rely on the system's timezone settings. You are *require ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- sed标签
转载 b label ,无条件跳转到标签label,如果label没有指定,跳转到命令的结尾 t label ,如果最后一次输入的最后一个 s/// 子命令执行成功,跳转到标签label,如果labe ...
- GitHub For Beginners: Commit, Push And Go
In Part 1 of this two-part GitHub tutorial, we examined the main uses for GitHub and bega5n the proc ...
- The mkdir Command
The mkdir command is is used to create new directories. A directory, referred to as a folder in some ...
- Core Animation 文档翻译 (第五篇)
构建Layer层次结构 在APP中大多数情况下,将Layer和View对象结合使用是Layer最好的使用方式.然而,很多时候我们可能需要通过添加单独的Layer对象,以便增加视图继承层次:当为了提 ...
- 使用locate 的正则查询 查找所有main.c
locate支持正则查询的功能, 只需输入locate -r 正则表达式 即可. 现在我想查找所有main.c怎么做? 打开终端,输入shell: locate -r main.c$ PS:' ...
- selenium的使用技巧及集成到scrapy
为了爬取拉钩,今天学习了selenum的使用技巧. from scrapy.http import HtmlResponse class JSPageMiddleware(object): ...
- Apache自带的rotatelogs实现日志轮转
用Apache自带的rotatelogs程序处理apache生成的日志自动截断重新生成,rotatelogs是一个配合Apache管道日志功能使用的简单程序.设置方法如下: 编辑Apache的主配置文 ...