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
Output
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)
题意: 不难理解, 我简单说说, 给出r行c列, 然后从第一行的第i个位置开始走
每个位置有标记E W S N, 分别表示向东, 向西, 向南, 向北
然后, 有两种情况, 一种能走出去, 一种是陷入死循环
做法: 每一步都标上是第几步走的就OK了~ 然后按题意模拟~
AC代码:
#include<stdio.h> char str[100][100]; int main() {
int r, c, in;
while(scanf("%d %d %d", &r, &c, &in) != EOF) {
if(r == 0 && c ==0 && in == 0)
break;
getchar();
for(int i = 0; i < r; i++)
gets(str[i]);
int tr, tc, loop;
int step = 0;
int mark = 1;
tr = 0; tc = in-1; while(1) {
if(str[tr][tc] == 'E') {
step++;
str[tr][tc] = step + '0';
if(tc == c-1)
break;
else
tc = tc + 1;
}
else if(str[tr][tc] == 'W') {
step++;
str[tr][tc] = step + '0';
if(tc == 0)
break;
else
tc = tc - 1;
}
else if(str[tr][tc] == 'S') {
step++;
str[tr][tc] = step + '0';
if(tr == r-1)
break;
else
tr = tr + 1;
}
else if(str[tr][tc] == 'N') {
step++;
str[tr][tc] = step + '0';
if(tr == 0)
break;
else
tr = tr - 1;
}
else {
mark = 0;
loop = str[tr][tc] - '0' - 1;
printf("%d step(s) before a loop of %d step(s)\n", loop, step - loop);
break;
}
}
if(mark == 1)
printf("%d step(s) to exit\n", step);
}
return 0;
}