Poj OpenJudge 百练 1573 Robot Motion
1.Link:
http://poj.org/problem?id=1573
http://bailian.openjudge.cn/practice/1573/
2.Content:
Robot Motion
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10856 Accepted: 5260 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 areN 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)
Source
3.Method:
模拟题,使用arr_mark保存行走路径,走到重复的路则为loop,出边界则为exit
特别注意 0 step(s) before a loop of 4 step(s) 的情况
如:
2 2 1
SW
EN
4.Code:
- #include <iostream>
- #include <cstring>
- using namespace std;
- //N,E,S,W
- const int idx_x[] = {,,,-};
- const int idx_y[] = {-,,,};
- const char idx_ch[] = {'N','E','S','W'};
- const int num_d = ;
- int main()
- {
- //freopen("D://input.txt","r",stdin);
- int y,x;
- int i;
- int w,h,s;
- cin >> h >> w >> s;
- while(h != || w != || s != )
- {
- int **arr_d = new int*[h];
- for(y = ; y < h; ++y) arr_d[y] = new int[w];
- char ch;
- for(y = ; y < h; ++y)
- {
- for(x = ; x < w; ++x)
- {
- cin >> ch;
- for(i = ; i < num_d; ++i) if(idx_ch[i] == ch) break;
- arr_d[y][x] = i;
- }
- }
- //for(y = 0; y < h; ++y)
- //{
- // for(x = 0; x < w; ++x)
- // {
- // cout << arr_d[y][x] << " ";
- // }
- // cout << endl;
- //}
- int **arr_mark = new int*[h];
- for(y = ; y < h; ++y)
- {
- arr_mark[y] = new int[w];
- memset(arr_mark[y],,sizeof(int) * w);
- }
- y = ;
- x = s - ;
- int path = ;
- int nx,ny;
- while(!arr_mark[y][x])//loop
- {
- nx = x;
- ny = y;
- arr_mark[y][x] = ++path;
- x = nx + idx_x[arr_d[ny][nx]];
- y = ny + idx_y[arr_d[ny][nx]];
- if(y < || y >= h || x < || x >= w) break;//exit
- }
- if(y < || y >= h || x < || x >=w)
- {
- cout << path << " step(s) to exit" << endl;
- }
- else
- {
- cout << (arr_mark[y][x] - ) << " step(s) before a loop of " << (arr_mark[ny][nx] - arr_mark[y][x] + ) << " step(s)" << endl;
- }
- //for(y = 0; y < h; ++y)
- //{
- // for(x = 0; x < w; ++x) cout << arr_mark[y][x] << " ";
- // cout << endl;
- //}
- for(y = ; y < h; ++y) delete [] arr_mark[y];
- delete [] arr_mark;
- for(y = ; y < h; ++y) delete [] arr_d[y];
- delete [] arr_d;
- cin >> h >> w >> s;
- }
- //fclose(stdin);
- return ;
- }
5.Reference:
http://poj.org/showmessage?message_id=123463
Poj OpenJudge 百练 1573 Robot Motion的更多相关文章
- Poj OpenJudge 百练 2632 Crashing Robots
1.Link: http://poj.org/problem?id=2632 http://bailian.openjudge.cn/practice/2632/ 2.Content: Crashin ...
- Poj OpenJudge 百练 1062 昂贵的聘礼
1.Link: http://poj.org/problem?id=1062 http://bailian.openjudge.cn/practice/1062/ 2.Content: 昂贵的聘礼 T ...
- Poj OpenJudge 百练 1860 Currency Exchang
1.Link: http://poj.org/problem?id=1860 http://bailian.openjudge.cn/practice/1860 2.Content: Currency ...
- Poj OpenJudge 百练 2602 Superlong sums
1.Link: http://poj.org/problem?id=2602 http://bailian.openjudge.cn/practice/2602/ 2.Content: Superlo ...
- Poj OpenJudge 百练 2389 Bull Math
1.Link: http://poj.org/problem?id=2389 http://bailian.openjudge.cn/practice/2389/ 2.Content: Bull Ma ...
- Poj OpenJudge 百练 Bailian 1008 Maya Calendar
1.Link: http://poj.org/problem?id=1008 http://bailian.openjudge.cn/practice/1008/ 2.content: Maya Ca ...
- 模拟 POJ 1573 Robot Motion
题目地址:http://poj.org/problem?id=1573 /* 题意:给定地图和起始位置,robot(上下左右)一步一步去走,问走出地图的步数 如果是死循环,输出走进死循环之前的步数和死 ...
- POJ 1573 Robot Motion(BFS)
Robot Motion Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12856 Accepted: 6240 Des ...
- POJ 1573 Robot Motion(模拟)
题目代号:POJ 1573 题目链接:http://poj.org/problem?id=1573 Language: Default Robot Motion Time Limit: 1000MS ...
随机推荐
- SQL中declare申明变量
在sql语句中加入�变量. declare @local_variable data_type 声明时须要指定变量的类型, 能够使用set和select对变量进行赋值, 在sql语句中就能够使用@lo ...
- show processlist 命令详解
如果有 SUPER 权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的 MySQL 帐户运行的线程). mysql> show processlist; +—–+— ...
- Android自定义radiobutton(文字靠左,选框靠右)
<RadioButton android:id="@+id/rb_never" android:layout_width="fill_parent" an ...
- Java中的DeskTop类
在Jdk1.6以后新增加了一个类--DeskTop,在JDK中它的解释是这样的: The Desktop class allows a Java application to launch a ...
- 安装DirectX SDK时出现Error Code:s1023 的解决方案
刚刚安装DXSDK_Jun10时(下载地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458 ...
- Java中 return 和finally
1. 最简单的情形 public void main(){ String s = test(); System.out.println("s=[" + s + "]&qu ...
- iOS之原生地图与高德地图
原生地图 1.什么是LBS LBS: 基于位置的服务 Location Based Service 实际应用:大众点评,陌陌,微信,美团等需要用到地图或定位的App 2.定位方式 1.GPS定位 2. ...
- 采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序
采用虚拟命名管道的字符设备和阻塞型I/O实现进程间的通信实现KWIC程序专业程序代写c++程序代写
- 用java 删除mongodb的数据
import java.net.UnknownHostException; import com.mongodb.BasicDBObject;import com.mongodb.DB;import ...
- LeetCode 344
Reverse String Write a function that takes a string as input and returns the string reversed. Exampl ...