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 ...
随机推荐
- 获取本机IP、mac地址、计算机名
python获取本机IP.mac地址.计算机名 在python中获取ip地址和在php中有很大不同,我们先来看一下python 获得本机MAC地址: >>> import uuid ...
- jQuery登陆判断简单实现代码
登陆判断在实际应用中还是比较常见,在客户端执行判断可以减少服务器端的负担,感兴趣的朋友可以参考下 复制代码代码如下: <script src="jquery-1.9.1.js" ...
- C#开发攀爬集锦
工具使用 Files has invalid value "<<<<<<< .mine". Illegal characters in p ...
- ipad ------ 与iPhone的差别
1. 差异 iPhone是手机,iPad.iPad Mini是平板电脑 iPhone和iPad开发的区别 屏幕的尺寸 \分辨率 UI元素的排布 \设计 键盘 API 屏幕方向的支持 … … 2. iP ...
- Quartz1.8.5例子(十)
/* * Copyright 2005 - 2009 Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the ...
- 解决在HTTPS页面里嵌套HTTP页面浏览器block的问题
问题描述: 浏览器默认是不允许在HTTPS里面引用HTTP页面的,ie下面会弹出提示框提示是否显示不安全的内容,一般都会弹出提示框,用户确认后才会继续加载,但是chrome下面直接被block掉,只在 ...
- PHP 判断是表单否有这个参数,如果没有则设置默认值
<?php @$name = $_GET["name"]; if(isset($name)) { echo "name = " .$name; } els ...
- windows远程桌面连接配置
我的电脑 -> 属性 -> 远程 把两个checkbox勾上 运行(win + r) -> 输入secpol.msc回车 -> 找到本地策略 -> 安全选项 ->账 ...
- 【HDU 3652】 B-number (数位DP)
B-number Problem Description A wqb-number, or B-number for short, is a non-negative integer whose de ...
- vs2015 Xamarin.Android安装
原文:vs2015 Xamarin.Android安装 Xamarin.Android 安装步骤,以vs2015为例 1,安装vs2015中的跨平台项,但是安装在国内肯定失败,因为需要到谷歌下载 当我 ...