Robot Motion
Time Limit: 1000MS
Memory Limit: 10000K
Total Submissions: 11262
Accepted: 5482

Description




A robot has been programmed to follow the instructions in its path. Instructions for the next direction the robot is to move are laid down in a grid. The possible instructions are




N north (up the page)

S south (down the page)

E east (to the right on the page)

W west (to the left on the page)



For example, suppose the robot starts on the north (top) side of Grid 1 and starts south (down). The path the robot follows is shown. The robot goes through 10 instructions in the grid before leaving the grid.



Compare what happens in Grid 2: the robot goes through 3 instructions only once, and then starts a loop through 8 instructions, and never exits.



You are to write a program that determines how long it takes a robot to get out of the grid or how the robot loops around.

Input

There will be one or more grids for robots to navigate. The data for each is in the following form. On the first line are three integers separated by blanks: the number of
rows in the grid, the number of columns in the grid, and the number of the column in which the robot enters from the north. The possible entry columns are numbered starting with one at the left. Then come the rows of the direction instructions. Each grid will
have at least one and at most 10 rows and columns of instructions. The lines of instructions contain only the characters N, S, E, or W with no blanks. The end of input is indicated by a row containing 0 0 0.

Output

For each grid in the input there is one line of output. Either the robot follows a certain number of instructions and exits the grid on any one the four sides or else the robot
follows the instructions on a certain number of locations once, and then the instructions on some number of locations repeatedly. The sample input below corresponds to the two grids above and illustrates the two forms of output. The word "step" is always immediately
followed by "(s)" whether or not the number before it is 1.

Sample Input

3 6 5
NEESWE
WWWESS
SNWWWW
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 0

Sample Output

10 step(s) to exit
3 step(s) before a loop of 8 step(s)
开始是将vis[0][star-1]=0,WA了好几次,后来想明白了,有循环到开始的情况,如果设置为零则无法判断,果断改为1了
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <string>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std; const int Max=1100000; char Map[1100][1100];
int vis[1100][1100];
int n,m,star;
int main()
{
while(scanf("%d %d %d",&n,&m,&star))
{
if(!n&&!m)
{
break;
}
scanf("%d",&star);
for(int i=0; i<n; i++)
{
scanf("%s",Map[i]);
}
memset(vis,0,sizeof(vis));
vis[0][star-1]=1;
int u=0;
int v=star-1;
while(1)
{
if(Map[u][v]=='N')
{
if(u-1==-1)
{
printf("%d step(s) to exit\n",vis[u][v]);
break;
}
else if(vis[u-1][v])
{
printf("%d step(s) before a loop of %d step(s)\n",vis[u-1][v]-1,vis[u][v]+1-vis[u-1][v]);
break;
} vis[u-1][v]=vis[u][v]+1;
u--; }
else if(Map[u][v]=='S')
{
if(u+1==n)
{
printf("%d step(s) to exit\n",vis[u][v]);
break;
}
else if(vis[u+1][v])
{
printf("%d step(s) before a loop of %d step(s)\n",vis[u+1][v]-1,vis[u][v]+1-vis[u+1][v]);
break;
} vis[u+1][v]=vis[u][v]+1;
u++; }
else if(Map[u][v]=='E')
{
if(v+1==m)
{
printf("%d step(s) to exit\n",vis[u][v]);
break;
}
else if(vis[u][v+1])
{
printf("%d step(s) before a loop of %d step(s)\n",vis[u][v+1]-1,vis[u][v]+1-vis[u][v+1]);
break;
} vis[u][v+1]=vis[u][v]+1;
v++; }
else if(Map[u][v]=='W')
{
if(v-1==-1)
{
printf("%d step(s) to exit\n",vis[u][v]);
break;
}
else if(vis[u][v-1])
{
printf("%d step(s) before a loop of %d step(s)\n",vis[u][v-1]-1,vis[u][v]+1-vis[u][v-1]);
break;
} vis[u][v-1]=vis[u][v]+1;
v--; }
}
}
return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Robot Motion 分类: POJ 2015-06-29 13:45 11人阅读 评论(0) 收藏的更多相关文章

  1. 百度地图-省市县联动加载地图 分类: Demo JavaScript 2015-04-26 13:08 530人阅读 评论(0) 收藏

    在平常项目中,我们会遇到这样的业务场景: 客户希望把自己的门店绘制在百度地图上,通过省.市.区的选择,然后加载不同区域下的店铺位置. 先看看效果图吧: 实现思路: 第一步:整理行政区域表: 要实现通过 ...

  2. 【Heritrix基础教程之2】Heritrix基本内容介绍 分类: B1_JAVA H3_NUTCH 2014-06-01 13:02 878人阅读 评论(0) 收藏

    1.版本说明 (1)最新版本:3.3.0 (2)最新release版本:3.2.0 (3)重要历史版本:1.14.4 3.1.0及之前的版本:http://sourceforge.net/projec ...

  3. Who's in the Middle 分类: POJ 2015-06-12 19:45 11人阅读 评论(0) 收藏

    Who's in the Middle Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34155   Accepted: 1 ...

  4. Segment Tree 扫描线 分类: ACM TYPE 2014-08-29 13:08 89人阅读 评论(0) 收藏

    #include<iostream> #include<cstdio> #include<algorithm> #define Max 1005 using nam ...

  5. Binary Indexed Tree 分类: ACM TYPE 2014-08-29 13:08 99人阅读 评论(0) 收藏

    #include<iostream> #include<cstring> #include<cstdio> using namespace std; int n, ...

  6. Segment Tree 分类: ACM TYPE 2014-08-29 13:04 97人阅读 评论(0) 收藏

    #include<iostream> #include<cstdio> using namespace std; struct node { int l, r, m; int ...

  7. 积分图像的应用(一):局部标准差 分类: 图像处理 Matlab 2015-06-06 13:31 137人阅读 评论(0) 收藏

    局部标准差在图像处理邻域具有广泛的应用,但是直接计算非常耗时,本文利用积分图像对局部标准差的计算进行加速. 局部标准差: 标准差定义如下(采用统计学中的定义,分母为): 其中. 为了计算图像的局部标准 ...

  8. iOS开发~CocoaPods使用详细说明 分类: ios相关 2015-04-01 16:45 68人阅读 评论(0) 收藏

    iOS开发-CocoaPods使用详细说明 一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来 ...

  9. c++map的用法 分类: POJ 2015-06-19 18:36 11人阅读 评论(0) 收藏

    c++map的用法 分类: 资料 2012-11-14 21:26 10573人阅读 评论(0) 收藏 举报 最全的c++map的用法 此文是复制来的0.0 1. map最基本的构造函数: map&l ...

随机推荐

  1. PostgreSQL/bin

    pg_receivexlog pg_receivexlog—以流的方式从一个PostgreSQL集簇得到事务日志 pg_receivexlog被用来从一个运行着的PostgreSQL集簇以流的方式得到 ...

  2. Leetcode: Palindrome Numbers

    Determine whether an integer is a palindrome. Do this without extra space. 尝试用两头分别比较的方法,结果发现无法解决1000 ...

  3. java-语法

    JAVA语法 1.标识符 1.定义:对各种变量.方法.类等进行命名的字符序列 2.规则:他的组成由字母.数字.$,数字不能出现在开始,不能和关键字重复,区分大小写 2.数据类型 1.分类 1基本数据类 ...

  4. 监控linux服务器网卡流量

    监控linux服务器网卡流量 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 前言:众所周知,我们安装zabbix服务器 ...

  5. Andriod环境搭建

    安卓是一款现在在移动端十分流行的系统,本人出于好奇心,希望彻底了解安卓的开发技. 首先了解一下安卓的系统构架,安卓大致分为四层架构,五块区域: 1.Linux内核层 Andriod是基于Linux2. ...

  6. mybatis的xml中特殊转义字符和模糊查询like的写法

    做个备忘: xml特殊符号转义写法 <          < >          > <>   <> &      & &ap ...

  7. 夺命雷公狗—angularjs—8—ng-class的简单用法

    我们在正常的业务处理中往往会遇到一些逻辑类的问题,比如各行换色,现在angularjs里面也给我们提供了一个小小的的class处理的方式,废话不多说,如下所示: <!doctype html&g ...

  8. 夺命雷公狗---DEDECMS----29dedecms热门大片的完成

    我们要完成的是热门大片的显示,如下所示: 热门大片,这一般都是按照浏览量高的放前面的而已,我们先来查查手册,如下所示: 这里发现我们的arclist标签里面的orderby和orderway完全可以实 ...

  9. 夺命雷公狗---DEDECMS----19dedecms栏目列表页的完成

    我们的栏目页表页的模版如果不清楚叫什么名,可以通过: 这里很清楚的记录着,我们来看下他: 他长得和我们以前做首页时候是不是很像呢?其实就是一样的,我们改下即可,如下所示: {dede:channel ...

  10. 【sublime】解决汉字输入的办法——InputHelper;在sublime中输入汉字==》InputHelper方法

    手工安装办法: cd ~/.config/sublime-text-2/Packages  #如果是sublime3就改一下 git clone https://github.com/xgenvn/I ...