poj1573
2016-07-20 18:27
211 查看
Robot Motion
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
Sample Output
这个代码不是我的,额,我也搞不懂为啥我的时间超限了
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=500;
char map[maxn][maxn];
int vis[maxn][maxn];
int stp[maxn][maxn];
int n,m,st;
void go(int i,int j,int step)
{
if(vis[i][j]==0){
cout<<step-1<<" step(s) to exit"<<endl;
return;
}
if(vis[i][j]==1){
int pre=stp[i][j]-1;
int loop=step-stp[i][j];
cout<<pre<<" step(s) before a loop of "<<loop<<" step(s)"<<endl;
return;
}
vis[i][j]=1;
stp[i][j]=step;
switch(map[i][j]){
case 'N':i--;break;
case 'S':i++;break;
case 'E':j++;break;
case 'W':j--;break;
}
go(i,j,step+1);
}
int main()
{
while(cin>>n>>m>>st,n||m||st){
memset(vis,0,sizeof(vis));//0 wall
memset(stp,0,sizeof(stp));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
vis[i][j]=-1;
}
}
go(1,st,1);
}
return 0;
}
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 12491 | Accepted: 6064 |
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)
这个代码不是我的,额,我也搞不懂为啥我的时间超限了
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=500;
char map[maxn][maxn];
int vis[maxn][maxn];
int stp[maxn][maxn];
int n,m,st;
void go(int i,int j,int step)
{
if(vis[i][j]==0){
cout<<step-1<<" step(s) to exit"<<endl;
return;
}
if(vis[i][j]==1){
int pre=stp[i][j]-1;
int loop=step-stp[i][j];
cout<<pre<<" step(s) before a loop of "<<loop<<" step(s)"<<endl;
return;
}
vis[i][j]=1;
stp[i][j]=step;
switch(map[i][j]){
case 'N':i--;break;
case 'S':i++;break;
case 'E':j++;break;
case 'W':j--;break;
}
go(i,j,step+1);
}
int main()
{
while(cin>>n>>m>>st,n||m||st){
memset(vis,0,sizeof(vis));//0 wall
memset(stp,0,sizeof(stp));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
vis[i][j]=-1;
}
}
go(1,st,1);
}
return 0;
}
相关文章推荐
- C#模拟http 发送post或get请求的简单实例
- Transformation 能将 Windows XP/Server 2003 操作系统,完美地模拟成 Windows Vista 的软件
- 用javascript和css模拟select的脚本
- PHP模拟asp.net的StringBuilder类实现方法
- C#使用ImitateLogin模拟登录百度
- javascript用层模拟可移动的小窗口
- JS模拟简易滚动条效果代码(附demo源码)
- 自编jQuery插件实现模拟alert和confirm
- JS模拟按钮点击功能的方法
- JS模拟的Map类实现方法
- PHP模拟asp中response类实现方法
- 模拟Spring的简单实现
- javascript 模拟点击广告
- JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
- php实现模拟post请求用法实例
- JavaScript实现MIPS乘法模拟的方法
- 模拟xcopy的函数
- JS模拟实现Select效果代码
- php模拟服务器实现autoindex效果的方法
- C# SendInput 模拟鼠标操作的实现方法