C语言-机器人OJ题目
问题描述
机器人按照给定的指令在网格中移动,指令有以下四种:
N 向北(上)移动
S 向南(下)移动
E 向东(右)移动
W 向西(左)移动
如下图所示,在网格1中,机器人初始位于网格第1行第5列,按照网格中的指令,机器人在走出网格前需要10步。在网格2中,机器人初始位于网格第1行第1列,按照网格中的指令,机器人将进入一个循环,永远走不出网格,且在进入循环前走了11步。

假定机器人初始时刻总是在网格第一行的某一列上,请你写一个程序确定机器人能否走出网格,并输出走出网格或进入循环需要的步数。
输入说明
输入数据第一行为空格分隔的3个整数,分别表示网格行数N、列数M和初始时刻机器人所在的列C(从网格最左边开始,以1为基准计数)。每个网格的行数和列数均不超过20。接下来是N行指令,指令只包含N,S,E和W四种,所有指令之间没有空格。
输出说明
如果机器人可以走出网格,输出"out "加上走出网格需要的步数;如果机器人进入循环不能走出网格,输出"loop "以及进入循环前走的步数。
输入样例
3 6 5
NEESWE
WWWESS
SNWWWW
输出样例
out 10
备注:个人试了很多组数据都没有问题,但交到OJ平台上都得不了满分。发这篇博文,除了提供一个思路外,也希望有巨佬能看看哪里有问题。
#include<stdio.h>
int main()
{
int n,m,start;
scanf("%d%d%d",&n,&m,&start);
getchar();//消除回车
char map[n][m];
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%c",&map[i][j]);
getchar();//消除回车
}
int b[n][m]={},count=0,row,col; //数列b用来标记是否走过这里。按理来说,{}中应该放个0,但不知道为什么我的一放就错
for(row=0,col=start-1;;)
{
count ++;
b[row][col] ++;
if(b[row][col]==2) //如果b[row][col]==2,说明机器人走过这里,将要进入循环
{
printf("loop %d",count-1);//进入循环的位置count计算了两次,所以要减一
break;
}
if(map[row][col]=='N') row --;
else if(map[row][col]=='S') row ++;
else if(map[row][col]=='E') col ++;
else col --;
if(row<0 || row==n || col<0 || col==m) //判断是否走出了地图
{
printf("out %d",count);
break;
}
}
return 0;
}
博客围绕C语言机器人OJ题目展开,介绍机器人按给定指令在网格中移动的规则,给出输入输出说明及样例。要求编写程序判断机器人能否走出网格并输出步数,博主试多组数据无误,但交OJ平台未得满分,希望有人帮忙找出问题。
2462

被折叠的 条评论
为什么被折叠?



