http://www.bnuoj.com/bnuoj/problem_show.php?pid=4358

【题意】:给定起始位置和方向和目的地,按照左转、前进、右转、后退的优先级递减,也就是说能左转就左转,不能则继续前进,。。。,能走到T的位置输出YES,不能则输出NO。。。

【题解】:

  首先我们知道YES肯定就是走到了,若出现NO的情况,肯定是出现了死循环,这题主要考标记,什么时候表示已经进入了死循环呢?每个位置有一个方向,我们将这个位置第一次出现方向的时候标记下来,注意是第一次的方向噢,第二次经过的时候判断,是否方向相同,相同则表示出现了跟之前一样的状态,也就是说出现了循环。。。

【code】:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; char map[][];
int cx[]={-,,,};
int cy[]={,,,-};
int dr[][];
int n,m; int isCheck(int x,int y)
{
if(x>=&&x<n&&y>=&&y<m) return ;
return ;
} int search(int sx,int sy,int d)
{
while()
{
if(map[sx][sy]=='T') return ;
// cout<<sx<<" "<<sy<<endl;
if(dr[sx][sy]==-)
{
dr[sx][sy]=d;
}
else if(dr[sx][sy]==d)
{
return ;
}
int tx,ty;
//如果左边是空位
int d1 = (d+)%;
tx = sx+cx[d1];
ty = sy+cy[d1];
if(isCheck(tx,ty)&&map[tx][ty]!='#')//可以左转
{
sx = tx;
sy = ty;
d = d1;
}
else if(isCheck(tx,ty)&&map[tx][ty]=='#') //不可以左转
{
// int d2 = (d+1)%4;
int tx2 = sx+cx[d];
int ty2 = sy+cy[d];
if(isCheck(tx2,ty2))
{
if(map[tx2][ty2]=='#')//前方不能走
{
int d2 = (d+)%;
int tx3 = sx+cx[d2];
int ty3 = sy+cy[d2];
if(isCheck(tx3,ty3))
{
if(map[tx3][ty3]!='#')//右边可以走
{
sx = tx3;
sy = ty3;
d = d2;
}
else //右边不可以走,向后走
{
int d3 = (d+)%;
sx = sx+cx[d3];
sy = sy+cy[d3];
d=d3;
}
}
}
else//前方能走
{
sx = tx2;
sy = ty2;
}
}
}
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(dr,-,sizeof(dr));
int i,j,flag=;
for(i=;i<n;i++) scanf("%s",map[i]);
char dir[];
scanf("%s",dir);
int d;
if(dir[]=='N') d=;
else if(dir[]=='E') d=;
else if(dir[]=='S') d=;
else if(dir[]=='W') d=;
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(map[i][j]=='S')
{
flag = search(i,j,d);
break;
}
}
}
if(flag) puts("YES");
else puts("NO");
}
return ;
}

bnu 4358 左手定则 (搜索)的更多相关文章

  1. opengl剪裁空间和视口空间中不遵从右手定则,而是遵从左手定则

    opengl剪裁空间和视口空间中不遵从右手定则,而是遵从左手定则. 比如说要在视口空间判断一个三角形是否是正面朝向用户,就需要用左手定则而非右手定则.

  2. JAVAEE——Solr:安装及配置、后台管理索引库、 使用SolrJ管理索引库、仿京东的电商搜索案例实现

    1 学习回顾 1. Lucene  是Apache开源的全文检索的工具包 创建索引 查询索引 2. 遇到问题? 文件名 及文件内容  顺序扫描法  全文检索 3. 什么是全文检索? 这种先创建索引 再 ...

  3. 全文搜索技术—Solr

    1.   学习计划 1. Solr的安装及配置 a)    Solr整合tomcat b)    Solr后台管理功能介绍 c)    配置中文分析器 2. 使用Solr的后台管理索引库 a)     ...

  4. JSOI Round 2题解

    强行一波题解骗一个访问量好了... http://blog.csdn.net/yanqval/article/details/51457302 http://absi2011.is-programme ...

  5. 【Unity3D】计算二维向量夹角(-180到180)

    在Unity3D中,有时候我们需要计算二维向量的夹角.二维向量夹角一般在0~180度之前,可以直接调用Vector2.Angle(Vector2 from, Vector2 to)来计算. 但是在有些 ...

  6. 可爱的PYTHON,更新到0.5版本代码

    这书看得挺顺的. 按着思路学习软件开发的主流思想.. cdctools.py # _*_ coding: utf-8 _*_ import os,sys def cdWalker(CDROM, cdc ...

  7. as3 公式

    AS3缓动公式:sprite.x += (targetX - sprite.x) * easing;//easing为缓动系数变量sprite.y += (targetY - sprite.y) * ...

  8. ●BZOJ 2007 NOI 2010 海拔

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2007 题解: 网络流.最小割.对偶图 奇妙的题 ~ 种种原因导致了高度要么为 0,要么为 1 ...

  9. 使用mediainfo工具统计每个视频文件(媒体文件)播放时长

    需求 1.运营那边需要统计大量视频文件的播放时长,并汇总记录到excel表中,问我有什么方法搞定 这边搜索了很多统计媒体文件时长的,主要有以下几种 1.使用java获取 2.使用python获取 3. ...

随机推荐

  1. Linux 内核模块设计

    一.  内核模块 1.  头文件 Linux/init.h  和 Linux/module.h 2.  装载内核 insmod  对应的转载函数 module_init(); 3.  卸载内核 rmm ...

  2. MYSQL5.5和5.6参数的差异

    performance_schema 在 MySQL 5.6 中默认是开启的,但相关的很多参数相比 MySQL 5.5 却是降低了,例如 performance_schema 自动调整到 445 个表 ...

  3. C#使用HttpHelper万能框架,重启路由器

    首先声明,不是所有路由器都可以通过下面的代码来让路由器执行重启. 下面的代码测试的路由器是(TP-LINK TD-W89841N增强型).要根据自己的路由器来写代码. using CsharpHttp ...

  4. CSS3动画与过渡

    transform:在使用2D或3D转换前需用transform-style申明转换的类型,preserve-3d或者preserve-2d 属性 translate(): 通过 translate( ...

  5. 使用zipalign.exe工具优化APK安装包

    zipalign.exe是Android自带的一个档案整理工具,它可以用于优化APK安装包,从而提升Android应用与系统之间的交互效率,提升应用程序的运行速度. 操作步骤: 1.在命令行窗口输入如 ...

  6. money 转换成 varchar

    Sql :cast(sum(colname) as varchar) 或者 convert(varchar,sum(colname)) ),sum(colname))

  7. win7下的mstsc ubuntu下的rdesktop

    远程图形化登录, win7下: 开始->mstsc->10.108.103.93即可进行后续输入账号密码验证登录. 功能类似rdesktop. 如图:

  8. win7如何建立无线局域网

    将win7电脑变身WiFi热点,让手机.笔记本共享上网用win7建立无线局域网,可以共享上网可以局域网游戏.开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑 ...

  9. swift闭包传值

    不知道原理,就知道这么用的,皮毛上的那一点. 寻思着把以前的项目改成swift的,结果了,,, 反向传值 一. //类似于OC中的typedef typealias sendValueClosure= ...

  10. NodeJS缓存机制:畅销货,就多囤一点呗

    上一篇文章,我们已经实现了客户端向NodeJS服务器发出请求时,服务器从磁盘读取文件内容后,向客户端返回文件的数据.而对于爱莲(iLinkIT)的1对n的场景,即将文件共享出来之后,让多个用户同时下载 ...