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 ;
}

最新文章

  1. static和extern的区别
  2. Jackson - Date Handling
  3. jQuery-ui treegird 使用
  4. PAT-L2-007-gplt真题
  5. java jdk动态代理模式举例浅析
  6. Excel—错误解释
  7. Codeforces 947F. Public Service 构造
  8. win7电脑蓝牙 耳机
  9. samba 二进制包 tar.gz 安装
  10. C++ 下面的AIDL
  11. Hibernate的查询功能
  12. leetcode-algorithms-1 two sum
  13. R语言编程艺术(5)R语言编程进阶
  14. mysql的时区错误的解决办法
  15. Python自动化之django model验证(很弱,感觉应用场景不多)
  16. 【ui】amazeui前端框架
  17. python网络编程-socket发送大数据包问题
  18. HashMap 在 Java1.7 与 1.8 中的区别
  19. dhcpcd 移植
  20. 数据挖掘-聚类分析(Python实现K-Means算法)

热门文章

  1. 核心概念 &mdash;&mdash; 服务提供者
  2. JavaScript “\”替换成 “\\”
  3. Ajax中解析Json的两种方法详解
  4. 【Android】ADB常用指令与logcat日志(转)
  5. win10下怎么在桌面创建IIS快捷方式
  6. Javascript之相册拖动管理
  7. OC8_setter方法展开
  8. java synchronized关键字
  9. STL Traits编程技法
  10. Poj OpenJudge 1068 Parencodings