题目大意:
给一个矩阵的行数和列数,然后给出机器人所在的位置,按照N,S,E,W四个方向走,问最后是走出矩阵还是进入循环。
解题思路:
用个数组记录该位置是否已经走过,然后按照提示走就可以了
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int r,c,s;
int i,j,count,mark,flag;
char ch[15][15];
int vis[15][15];
while(scanf("%d%d%d",&r,&c,&s)!=EOF)
{
flag=0;
memset(vis,0,sizeof(vis));
if(r==0&&c==0&&s==0)
{
break;
}
for(i=1;i<=r;i++)
{
getchar();
ch[i][0]='e';
for(j=1;j<=c;j++)
{
scanf("%c",&ch[i][j]);
}
ch[i][c+1]='e';
}
for(i=0;i<=c+1;i++)
{
ch[0][i]='e';
}
for(i=0;i<=c+1;i++)
{
ch[r+1][i]='e';
}
i=1;j=s;
count=1;
while(ch[i][j]!='e')
{
if(ch[i][j]=='W')
{
vis[i][j]=count;
i=i;j=j-1;
if(vis[i][j])
{
mark=count+1-vis[i][j];
flag=1;
break;
}
else
{
count++;
}
}
else if(ch[i][j]=='E')
{
vis[i][j]=count;
i=i;j=j+1;
if(vis[i][j])
{
mark=count+1-vis[i][j];
flag=1;
break;
}
else
{
count++;
}
}
else if(ch[i][j]=='N')
{
vis[i][j]=count;
i=i-1;j=j;
if(vis[i][j])
{
mark=count+1-vis[i][j];
flag=1;
break;
}
else
{
count++;
}
}
else if(ch[i][j]=='S')
{
vis[i][j]=count;
i=i+1;j=j;
if(vis[i][j])
{
mark=count+1-vis[i][j];
flag=1;
break;
}
else
{
count++;
}
}
}
if(flag)
{
printf("%d step(s) before a loop of %d step(s)\n",vis[i][j]-1,mark);
}
else
{
printf("%d step(s) to exit\n",count-1);
}
}
return 0;
}