nyoj 1129 Salvation(判断方向+判断走向)
Salvation
- 描述
-
神秘瀑布镇是一个神秘的地方,那里有吸血鬼,狼人,巫师,二重身。 Klaus(吸血鬼祖先) 为了利用 Elena 的血液发展他的混血大军(吸血鬼&狼人),也来到了神秘瀑布镇。Stefan 因为深爱着 Elena ,于是 Stefan 决定去唤醒吸血鬼猎人,来解救 Elena 。
吸血鬼猎人被封锁在一个迷宫里,这个迷宫有一种特性,只要进入就会失去方向感。于是 Stefan 想到一种方法,以左为标准(即优先左走),其次向前,向右,如果都无法走就向后走(即向右转两次)。他可以向上下左右四个方向的空格移动一个格,每次耗费1分钟。Stefan 在得知你是一个有天赋的程序员后,决定让你判断他是否能找到吸血鬼猎人。
- 输入
-
输入包含多组测试数据,第一行输入 n , m ( 2 < n ,m <= 100) ,接下来n行每行m个字符,第 n + 2 行一个字符表示初始方向(E W S N)。
“.”代表空格 ,“#”代表墙 , “ T ”代表初始位置,“X”代表吸血鬼猎人的位置。 - 输出
- 输出一行,如果能找到输出“YES”,否则输出“NO”。
- 样例输入
-
4 4 .... .##. .##. TX.. N 4 4 .... .##. .### T#.X N
- 样例输出
-
YES NO
-
这是个技巧题!
-
一定要自己多琢磨一下方向问题!
-
可以把任意方向作为标记为0(我把S作为0的方向),其他方向分别标记为1,2,3;(这个需要自己琢磨)!!!
-
(自己看了一下午我,哎!)!
-
还有mov数组的赋值也和你定的0方向有关!
-
我的标记 (s的前边)S 0; mov数组: 1,0 (s的前边) 方向和标记一致!
-
(s的左边)E 1; 0,1 (s的。。)
-
(s的右边)N 2; -1,0 (。。)
-
(s的后边)W 3; 0,-1 (。。)
-
由于四个方向原因,要在不同的方向行走:visit数组要标记4遍才算标记过!
-
好吧!就这样!
-
、代码:
-
#include<stdio.h> #include<string.h> #define N 110 int mov[4][2]={1,0,0,1,-1,0,0,-1}; int visit[N][N]; int n,m,bgx,bgy,endx,endy,mark; char map[N][N]; int judge(int x,int y) {return x>=0&&x<n&&y>=0&&y<m&&map[x][y]!='#'&&visit[x][y]<4; } void dfs(int DR,int x,int y) {if(mark)return;for(int i=1;i>-3;i--){int dr=(DR+i+8)%4;//主要的功能的实现!自己先试试,把方向做定! int tx=x+mov[dr][0];int ty=y+mov[dr][1]; if(judge(tx,ty)){if(tx==endx&&ty==endy)mark=1;visit[tx][ty]++;dfs(dr,tx,ty);return ;//这里的理解,。。。,不加就wa了!暂时不太理解 }}return ; } int main() {while(scanf("%d%d",&n,&m)!=EOF){int i,j;for(i=0;i<n;i++){getchar();for(j=0;j<m;j++){scanf("%c",&map[i][j]);if(map[i][j]=='T'){bgx=i;bgy=j;}if(map[i][j]=='X'){endx=i;endy=j;}}}getchar();char s;int DR;scanf("%c",&s);switch (s)//判断初始方向 {case 'S': DR=0;break;case 'E': DR=1;break;case 'N': DR=2;break;case 'W': DR=3;break;}memset(visit,0,sizeof(visit));mark=0;dfs(DR,bgx,bgy);if(mark)printf("YES\n");elseprintf("NO\n");}return 0; }
-
-
-
nyoj 1129 Salvation(判断方向+判断走向)相关推荐
- java三点确定圆弧_圆弧方向判断方法和三点确定一个圆的计算方法
圆弧方向判断方法 设p1=(x1,y1) p2=(x2,y2) p3=(x3,y3) 求向量 p12=(x2-x1,y2-y1) p23=(x3-x2,y3-y2) 则当 p12与p23的叉乘(向量积 ...
- 圆弧方向判断方法和三点确定一个圆的计算方法
圆弧方向判断方法 设p1=(x1,y1) p2=(x2,y2) p3=(x3,y3) 求向量 p12=(x2-x1,y2-y1) p23=(x3-x2,y3-y2) 则当 p12与p2 ...
- python实现基于八方向判断的断裂连接
''' 八方向连接算法 ''' import numpy as np import matplotlib.image as mpimg from PIL import Image def comput ...
- IOS基础之iPad的屏幕旋转方向判断
IOS基础之iPad的屏幕旋转方向判断 #pragma mark - 屏幕旋转 - (void)viewWillTransitionToSize:(CGSize)size withTransition ...
- input 输入速度和方向判断、搜索功能的延迟请求
1.input 输入速度和方向判断 var wxApp = {} wxApp.click = function (str,speed) {var lastInput = {d: "" ...
- Android-传感器开发-方向判断
FROM:http://blog.csdn.net/baidu_28479651/article/details/47299927 自从苹果公司在2007年发布第一代iPhone以来,以前看似和手机挨 ...
- 斜齿轮、圆锥齿轮、蜗轮蜗杆的旋向(螺旋线方向)、转向、圆周力、径向力、轴向力等的方向判断【小记】
斜齿轮.圆锥齿轮.蜗轮蜗杆 相关的方向判断 [PS. 只是记录自己的心得,不保证一定对.Σσ(・Д・:)!!!] 一.斜齿轮.蜗轮蜗杆3种力方向的判断 本质上都是斜齿轮,互通. 口诀: 圆周力 FtF ...
- iOS开发入门——模拟器方向判断及基本功能
iOS开发入门--模拟器方向判断及基本功能 方向判断简单实用 手机模拟器吧,嗯...很多时候我们可能会遇到手机横屏之后图像没变的情况,嗯?怎么回事?这次我们就先来看看这种情况,做一个简单的判断. im ...
- UNITY中利用点乘和叉乘判断方向 2D
void DirectionJudge(){Vector3 dir = mousePositionInWorld - transform.position;dir.z = 0f;var magiDir ...
最新文章
- HTTP协议之Chunked解析
- Linux系统下配置Java环境
- 一个关于小程序Iot的具体实现(MQTT版)
- 【玩转Ubuntu】01. Ubuntu上配置JDK
- 面试题编程题11-python 生成随机数
- Leetcode题库 5.最长回文子串(C++实现)
- mongo mapreduce java_那位帮忙提供一个java mongodb多个collection进行mapreduce的操作。
- Android之基于BaseAdapter和SimpleAdapter的GridView
- ArcEngine开发 退出系统报错
- C++是一种糟糕的语言 Linux之父炮轰C++
- jQuery(三)—— jQuery 事件 / jQuery 拷贝对象 / 多库共存 / jQuery 插件
- 大数据之-Hadoop环境搭建_hadoop官网手册---大数据之hadoop工作笔记0020
- 网信办拟规定:平台未经用户同意不得强制订阅关注账号;Twitter回应大范围宕机;Krita 4.4.0发布|极客头条
- BASH系列(2)——变量
- 11g表名大小写 oracle_Oracle数据库总结
- CNware防DDOS攻击介绍--云宏
- LCD12864驱动显示程序
- 7个人生工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
- IDEA使用Git大全
- Python交流QQ群