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. CSS中link和@import的区别是:

    Link属于html标签,而@import是CSS中提供的 在页面加载的时候,link会同时被加载,而@import引用的CSS会在页面加载完成后才会加载引用的CSS @import只有在ie5以上才 ...

  2. (转载)运行主机管理在openvswitch之上

    在这篇文章里介绍了如果运行主机管理在openvswitch之上,而不是单独配置一个物理网卡用于主机管理,并且所有的vm的流量还是通过openvswitch走的. Running Host Manage ...

  3. java之enum枚举(2015年05月28日)

    背景: 今天启动了一个新的项目,由于要从之前的旧项目中拿过来一些代码,所以就看了下公司之前项目代码,发现有定义的常量类,也有枚举类,然后就在想着两者的功能差不多,那他们之间到底有什么区别呢,所以就决定 ...

  4. Quartz Scheduler(2.2.1) - Working with JobStores

    About Job Stores JobStores are responsible for keeping track of all the work data you give to the sc ...

  5. Redis - 环境的安装配置

    Redis 下载安装步骤: 下载 redis 源码: [huey@huey-K42JE ~]$ wget http://download.redis.io/releases/redis-x.y.z.t ...

  6. 整合Spring与Hibernate

    在学习spring的时候,要整合hibernate,本来是看起来挺简单的,但是遇到的远要比想到了多,而且多很多,期间几天一个bug实在难调,几度放弃,但终究柳暗花明,抑制不住喜悦就想着分享一下成果吧. ...

  7. android中Json数据保存方式

    package com.example.savejsonproject; import java.io.File; import java.io.FileNotFoundException; impo ...

  8. android NDK 开发步骤

    NDK开发一般分为一下几个步骤:(默认你已经安装好了NDK和android开发环境) 1.创建一个项目 2.创建JNI目录 3.编写nativejava层方法 4.生成JNI头文件 (1)编写java ...

  9. CSS有用的代码片段

    1.垂直对齐 .vc{ position:relative; top:50%; -webkit-transform:translateY(-50%); -o-transform:translateY( ...

  10. [转]SQL中使用WITH AS提高性能-使用公用表表达式(CTE)简化嵌套SQL

    一.WITH AS的含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候, ...