机器人走网格,分走出去和走成循环的两种情况。模拟水题,开了两个数组分别存储走的数据,和步数数据
若第二次走到同一格上就是循环,计算步数输出。走出去就判断一下就好。
#include<stdio.h>
#include<string.h>
int main()
{
int h,l,t;
while (1)
{
int i,j,a[501][501]={0},b[501][501]={0},x,y,c=0;
char s[501]="";
scanf("%d%d%d",&h,&l,&t);
if (h==0&&l==0) break;
for (i=1;i<=h;i++)
{
scanf("%s",s);
for (j=1;j<=l;j++)
{
if (s[j-1]=='N') a[i][j]=1;
if (s[j-1]=='E') a[i][j]=2;
if (s[j-1]=='S') a[i][j]=3;
if (s[j-1]=='W') a[i][j]=4;
}
}
x=t;y=1;
while (1)
{
if (b[y][x]==0) {b[y][x]=c+1;c=c+1;}
else {printf("%d step(s) before a loop of %d step(s)\n",b[y][x]-1,c+1-b[y][x]);break; }
if (a[y][x]==1) y=y-1; else
if (a[y][x]==2) x=x+1; else
if (a[y][x]==3) y=y+1; else
if (a[y][x]==4) x=x-1;
if (a[y][x]==0) {printf("%d step(s) to exit\n",c);break;}
}
}
}