hx073269最近玩起了机器人游戏,在这个机器人游戏中,他要控制一个机器人进行走动,但是这个机器人只有四个指令,分别为:
N(向上走一步)
S(向下走一步)
E(向右走一步)
W(向左走一步)
如图一所示,机器人从正上方走入方格矩阵,经过10步从最左边走出方格。
如图二所示,机器人从正上方走入方格矩阵,经过三步后,陷入了一个循环,循环的路径长度为8.
现在hx073269希望你写一个程序来判断机器人离开方格矩阵需要多长时间,或者说机器人是如何循环的。
输入
输入包含多组测试用例。
对于每个样例。
第一行包含三个数字 n,m,t,n代表矩阵的行数,m代表矩阵的列数,t代表机器人从正上方的第t列进入迷宫。(1<=n,m<=10, 1=<t<=m)
接下来输入一个n行m列的方格矩阵。
0 0 0 代表输入结束。
输出
对于输入的每个样例,都有一行输出。
要么机器人遵循一定数量的指令,从任意一边的网格中退出,要么机器人遵循一定数量位置上的指令一次,然后重复某些位置上的指令。
下面的示例输入对应于上面的两个网格,并说明了两种输出形式。
样例输入 Copy
3 6 5
NEESWE
W W WESS(中间没有空格)
SNW W W W(中间没有空格)
4 5 1
SESWE
EESNW
NWEEN
EWSEN
0 0 0
样例输出 Copy
10 step(s) to exit
3 step(s) before a loop of 8 step(s)
_
我的代码_
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,m,t,step=0,pace,j,i,flag,start;
while(1)
{
scanf("%d%d%d",&n,&m,&t);
int a[n+2][m+2]={0},b[n+2][m+2]={0},c[n+2][m+2]={0};
if(n==0&&m==0&&t==0) exit(0);
char ch,chn;
for(i=1;i<n+1;i++)
{
for(j=1;j<m+1;j++)
{
if(j==1) chn=getchar();
scanf("%c",&ch);
switch(ch)
{
case 'N':
a[i][j]=1;
break;
case 'S':
a[i][j]=2;
break;
case 'E':
a[i][j]=3;
break;
case 'W':
a[i][j]=4;
break;
}
}
}
int x=1,y=t,step=1;
start=a[x][y];
for(;;)
{
b[x][y]=1;
switch(start)
{
case 1:
x--;
break;
case 2:
x++;
break;
case 3:
y++;
break;
case 4:
y--;
break;
default:
break;
}
start=a[x][y];
if (start==0)
{
flag=1;
break;
}
if(b[x][y]==1)
{
flag=0;
break;
}
step++;
}
if(flag==1)
printf("%d step(s) to exit\n",step);
if(flag==0)
{
pace=0;
start=a[x][y];
while(1)
{
start=a[x][y];
c[x][y]=1;
switch(start)
{
case 1:
x--;
break;
case 2:
x++;
break;
case 3:
y++;
break;
case 4:
y--;
break;
}
pace++;
if (c[x][y]==1) break;
}
printf("%d step(s) before a loop of %d step(s)\n",step-pace,pace);
}
}
return 0;
}
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。