-->Robot Motion

直接中文

Descriptions:

样例1

样例2

有一个N*M的区域,机器人从第一行的第几列进入,该区域全部由'N' , 'S' , 'W' , 'E' ,走到某个区域的时候只能按照该区域指定的方向进行下一步,问你机器人能否走出该片区域,若不能,输入开始绕圈的步数和圈的大小。操作指令如下:

N 向上 
S 向下 
E 向右 
W 向左

例如,假设机器人从网格1的北(顶)侧开始,从南(下)开始。机器人所遵循的路径如图所示。在离开网格之前,机器人在网格中执行10条指令。

比较网格2中发生的情况:机器人仅通过3条指令,然后通过8条指令开始循环,并且永不退出。

您将编写一个程序来确定机器人离开网格所需的时间或机器人如何循环。

Input

第一行是由空格分隔的三个整数:网格中的行数,网格中的列数以及机器人从北方进入的列数。 然后是方向指令的行。 每个网格将至少有一行,最多10行和一些指令。 指令行仅包含字符N,S,E或W,没有空格。 输入的结尾由包含0 0 0的行指示。

Output

对于每组输入,有一行输出。 机器人遵循一定数量的指令并在四边中的任何一个上退出网格,否则机器人遵循一定数量的位置上的指令,然后重复指示某些位置上的指令。 下面的示例输入对应于上面的两个网格,并说明了两种输出形式。“step”一词后面紧跟“(s)”,无论后面的数字是否为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)

题目链接

https://vjudge.net/problem/POJ-1573

没啥说的,直接dfs搜就行

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 25
using namespace std;
int r,c,s;//行,列,从第s列开始
char mp[Maxn][Maxn];//地图
int vis[Maxn][Maxn];//标记是否走过
int step[Maxn][Maxn];//(x,y)是第几步 //(x,y) 下一步的字母标志 到(x,y)已是第step步
void dfs(int x,int y,char op,int start)
{
//走出迷宫
if(mp[x][y]=='X'||x<&&y<&&x>r&&y>c)
cout<<start<<" step(s) to exit"<<endl;
//(x,y)没走过
else if(!vis[x][y])
{
vis[x][y]=;
step[x][y]=start+;
//四种走法
if(op=='N')
return dfs(x-,y,mp[x-][y],step[x][y]);
if(op=='S')
return dfs(x+,y,mp[x+][y],step[x][y]);
if(op=='E')
return dfs(x,y+,mp[x][y+],step[x][y]);
if(op=='W')
return dfs(x,y-,mp[x][y-],step[x][y]);
}
//(x,y)走过,输出即可
else if(vis)
cout<<step[x][y]-<<" step(s) before a loop of "<<start+-step[x][y]<<" step(s)"<<endl;
}
int main()
{
while(cin>>r>>c>>s,r+c+s)
{
//初始化
MEM(mp,'X');
MEM(vis,);
MEM(step,);
for(int i=; i<=r; i++)
for(int j=; j<=c; j++)
cin>>mp[i][j];
step[][s]=;
dfs(,s,mp[][s],step[][s]);
}
}

【POJ - 1573】Robot Motion的更多相关文章

  1. POJ 1573:Robot Motion

    Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11324   Accepted: 5512 Des ...

  2. bzoj 2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...

  3. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  4. BZOJ2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 284  Solved: 82[Submit][St ...

  5. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  6. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  7. BZOJ2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 126  Solved: 90[Submit][Sta ...

  8. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  9. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

随机推荐

  1. 【Git】打标签

    打标签 同大多数 VCS 一样,Git 也可以对某一时间点上的版本打上标签.人们在发布某个软件版本(比如 v1.0 等等)的时候,经常这么做.本节我们一起来学习如何列出所有可用的标签,如何新建标签,以 ...

  2. WPF svg 转 xmal

    原文:WPF svg 转 xmal 今天wpf里面要用矢量图,美工出的是svg格式的,需要将svg格式的转换为xaml 1.第一个尝试是安装Inkscape,这个软件可以直接将svg另存为xaml,但 ...

  3. Android实现dialog时候弹出软键盘dialog移位问题

    Window win = getWindow(); WindowManager.LayoutParams params = win.getAttributes(); win.setSoftInputM ...

  4. fprintf函数将格式打印到文件,非常好用(怎么没早点发现这个函数)

    /* fprintf example */ #include <stdio.h> int main () { FILE * pFile; int n; ]; pFile = fopen ( ...

  5. Windows完成端口与猪肉佬

    首先应该说明的是,我也是第一次使用完成端口.虽然以前偶尔在网上看到完成端口的文章和代码,但真正自己动手写还是第一次,不过我这个人有个特点就是大胆,例如没有写那个界面编程系列前,其实我甚至不知道原来一个 ...

  6. Linux基础命令杂记

    今天又一次搞Linux生产环境搭建.这是种步骤很多,很繁琐而且又不得不做的事情.虽然做过很多次,但还是有很多步骤.命令不记得,每一次到处找资料很麻烦,于是将一些步骤记下,以便查找. 登录远程MySQL ...

  7. CSS3 Maker提供了10个最为常用的CSS3属性在线生成工具

    CSS3 Maker提供了10个最为常用的CSS3属性在线生成工具,比如说border-radius.gradient.transfrom.animation.transition.rgba.text ...

  8. [java代码库]-简易计算器(第二种)

    [java代码库]-简易计算器(第二种) 第二种方案:在程序中不使用if/switch……case等语句,完成计算器功能. <html> <head> <title> ...

  9. QTableView中加入Check列实现,无需Delegate(使用::data(),Qt原生支持)

    通过Delegate创建QCheckBox来实现的Check列,只有在该列进入编辑模式时才能够Check/Uncheck.这显然不是我们想要的,网上翻来翻去,在一个国外论坛中看到了无需Delegate ...

  10. python列表和字典的迭代

    1.列表和字典的迭代 程序开发中,对列表和字典进行迭代是非常常见的事情. 字典一般可以选择对key进行迭代.对value迭代和对key/value一起迭代 >>> d = {'a': ...