hdoj 1035 Robot Motion
Robot Motion
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7974 Accepted Submission(s):
3685
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.
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.
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.
#include<stdio.h>
#include<string.h>
#define MAX 110
char map[MAX][MAX];//所要走的地图
int vis[MAX][MAX];//用来记录当前走了多少步
int n,m,t;
int x2,y2;//用于记录当前步的上一步
void dfs(int x1,int y1)
{
if(x1>n||x1<1||y1<1||y1>m)//如果超出地图范围则证明已经走出去了
{
printf("%d step(s) to exit\n",vis[x2][y2]);
return ;
}
else if(vis[x1][y1])//如果不为0则证明此处已经走过形成环
{
printf("%d step(s) before a loop of %d step(s)\n",vis[x1][y1]-1,vis[x2][y2]-vis[x1][y1]+1);
return ;
}
vis[x1][y1]=vis[x2][y2]+1;//当前走的步数是上一步加1
x2=x1;y2=y1;
if(map[x1][y1]=='W')//向左走
y1-=1;
else if(map[x1][y1]=='S')//向下走
x1+=1;
else if(map[x1][y1]=='E')//向右走
y1+=1;
else if(map[x1][y1]=='N')//向上走
x1-=1;
dfs(x1,y1);
}
int main()
{
int j,i,s,k;
int x1,x2,y1,y2;
while(scanf("%d%d",&n,&m)&&n!=0&&m!=0)
{
scanf("%d",&t);
for(i=1;i<=n;i++)
{
getchar();
for(j=1;j<=m;j++)
{
scanf("%c",&map[i][j]);
}
}
x1=1;y1=t;//起点
x2=x1;y2=y1;
memset(vis,0,sizeof(vis));//数组清零
dfs(x1,y1);
}
return 0;
}
hdoj 1035 Robot Motion的更多相关文章
- HDOJ(HDU).1035 Robot Motion (DFS)
HDOJ(HDU).1035 Robot Motion [从零开始DFS(4)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DF ...
- [ACM] hdu 1035 Robot Motion (模拟或DFS)
Robot Motion Problem Description A robot has been programmed to follow the instructions in its path. ...
- hdu 1035 Robot Motion(模拟)
Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...
- hdu 1035 Robot Motion(dfs)
虽然做出来了,还是很失望的!!! 加油!!!还是慢慢来吧!!! >>>>>>>>>>>>>>>>> ...
- 题解报告:hdu 1035 Robot Motion(简单搜索一遍)
Problem Description A robot has been programmed to follow the instructions in its path. Instructions ...
- HDU 1035 Robot Motion(dfs + 模拟)
嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035 这道题比较简单,但自己一直被卡,原因就是在读入mp这张字符图的时候用了scanf被卡. ...
- (step 4.3.5)hdu 1035(Robot Motion——DFS)
题目大意:输入三个整数n,m,k,分别表示在接下来有一个n行m列的地图.一个机器人从第一行的第k列进入.问机器人经过多少步才能出来.如果出现了循环 则输出循环的步数 解题思路:DFS 代码如下(有详细 ...
- HDU-1035 Robot Motion
http://acm.hdu.edu.cn/showproblem.php?pid=1035 Robot Motion Time Limit: 2000/1000 MS (Java/Others) ...
- hdu1035 Robot Motion (DFS)
Robot Motion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
随机推荐
- ubuntu 基本操作(1)
命令行界面与图形界面 全屏模式: ctrl + alt + f1进入命令行界面 ctrl + alt + f7 切换图形界面 小窗口: ctrl+alt+t:进入终端 设计ubuntu root 密码 ...
- HTML5 的绘图支持- canvas
Canvas HTML5新增了一个canvas元素,它是一张空画布,开发者需要通过JavaScript脚本进行绘制. 在canvas上绘图,经过如下3步 (1) 获取canvas元素对应的DOM对象. ...
- 读取Android APK文件签名的方法
在微信开放平台等申请API key 和secret时经常要用到apk文件签名,那么如何读取呢? 下面贴一下相关读取源码: 一共两个文件MainActivity和MD5, package com.lcg ...
- Mysql锁机制和事务控制
如何加锁 锁定表的语法: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_n ...
- USB Key插入和移除监控
近期在做USB Key插入和移除监控,已经做到了插入和移除USB Key时,程序能够及时感应到. 如下为源代码: private void Form1_Load(object sender, Even ...
- [简历] JAVA 软件工程师
首先,一份好的简历不光说明事实,更通过FAB模式来增强其说服力. Feature:是什么 Advantage:比别人好在哪些地方 Benefit:如果雇佣你,招聘方会得到什么好处 其次,写简历和写议论 ...
- web design tools
https://www.google.com/webdesigner/ http://html.adobe.com/edge/inspect/ http://www.creativebloq.com/ ...
- handoff了解
iOS8推出一个新特性,叫做Handoff.Handoff中文含义为换手(把接力棒传给下一个人),可以在一台Mac和iOS设备上开始工作,中途将工作交换到另一个Mac或iOS设备中进行.这个在iOS8 ...
- DM8168 解码显示模块代码阅读分析
解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...
- python manage.py shell之后的一些错误:
1. 在执行python manage.py shell之后的一些错误: wyl@wyl:~/myobject$ python manage.py shell /usr/lib/python2.7/d ...