题意:给你一个棋盘,上面的字母代表机器人要走的方向。假设机器人能走出这个棋盘,则输出机器人所走的步数,否则输出该机器人在走向无限循环前所走的步数。及无限循环所要走的格子数
思路:直接模拟,没有思路(大神能够多考虑些思路)
AC代码:
#include<stdio.h>
#include<string.h>
char str[12][12];
int flag[12][12];
int r,c,s,sum,loop;
void dfs(int x,int y)
{
if(x>=r||y>=c||x<0||y<0){
printf("%d step(s) to exit\n",sum);
return ;
}
if(flag[x][y]==2)
{
printf("%d step(s) before a loop of %d step(s)\n",sum-loop,loop);
return ;
}
if(str[x][y]=='E')
{
if(flag[x][y]==1)
loop++;
else
sum+=1;
flag[x][y]+=1;
dfs(x,y+1);
}
else if(str[x][y]=='W')
{
if(flag[x][y]==1)
loop++;
else
sum+=1;
flag[x][y]+=1;
dfs(x,y-1);
}
else if(str[x][y]=='S')
{
if(flag[x][y]==1)
loop++;
else
sum+=1;
flag[x][y]+=1;
dfs(x+1,y);
}
else
{
if(flag[x][y]==1)
loop++;
else
sum+=1;
flag[x][y]+=1;
dfs(x-1,y);
}
}
int main()
{
while(scanf("%d %d %d",&r,&c,&s)!=EOF)
{
if(r==0&&c==0&&s==0)break;
sum=0;
loop=0;
int i,j;
memset(str,0,sizeof(str));
memset(flag,0,sizeof(flag));
for(i=0;i<r;i++){
getchar();
scanf("%s",str[i]);
}
dfs(0,s-1);
}
return 0;
}