题意
描述
有个机器人按照程序走路,看能不能走出去。
输入
第一行a b w
分别表示行数列数初始的进入位置(列),行永远是第一行。
之后a行每行b个字母表示在每个格子里走的方向。
题解
思路
没什么好说的,简单的模拟题,照着写就行了。
代码
#include <stdio.h>
#include <memory>
int main(){
int a,b,l;
char map[14][14];
int find[14][14];
while(1){
scanf("%d%d%d",&a,&b,&l);
getchar();
if(a == 0 && b == 0 && l == 0)
break;
memset(find,0,sizeof(find));
char tmp;
for( int i = 0 ; i < a ; i++){
for ( int j = 0 ; j < b ; j++ ){
scanf("%c",&tmp);
map[i][j] = tmp;
}
getchar();
}
int step = 1;
int nx = 0 , ny = l-1;
find[nx][ny] = step;
while(1){
tmp = map[nx][ny];
//printf("step = %d , x = %d , y = %d , w = %c ,",step,nx,ny,tmp);
switch(tmp){
case 'N':
{
nx--;
break;
}
case 'E':
{
ny++;
break;
}
case 'S':
{
nx++;
break;
}
case 'W':
{
ny--;
break;
}
}
//printf("nx = %d , ny = %d \n",nx,ny);
if( nx >= a || nx < 0 || ny >= b || ny < 0 ){
printf("%d step(s) to exit\n",step);
break;
}
if( find[nx][ny] != 0 ){
printf("%d step(s) before a loop of %d step(s)\n",find[nx][ny] - 1 , step + 1 - find[nx][ny]);
break;
}
step++;
find[nx][ny] = step;
}
}
}