又是一个模拟,跟着题意来就好了,我懒得设两个数组一个表示标记一个表示步数,所以传参的时候要传1.
#include<cstdio>
#include<cstring>
#include<algorithm>
int n,m,k;
int cnt[110][110];
char map[110][110];
void dfs(int x,int y,int temp)
{
if(x >= n || y >=m || x < 0 ||y < 0)
{
printf("%d step(s) to exit\n",temp - 1);
return ;
}
if (cnt[x][y] == 0)
cnt[x][y] = temp;
else{
printf("%d step(s) before a loop of %d step(s)\n",cnt[x][y] - 1,temp - cnt[x][y]);
return ;
}
if(map[x][y] == 'N')
{
dfs(x - 1,y,temp + 1);
}
else if(map[x][y] == 'S')
{
dfs(x + 1,y,temp + 1);
}
else if(map[x][y] == 'E')
{
dfs(x,y + 1,temp + 1);
}
else dfs(x,y - 1,temp + 1);
return ;
}
int main()
{
while (~scanf("%d %d %d",&n,&m,&k))
{
if (n == 0&&m ==0 &&k == 0)
{
break;
}
memset(cnt,0,sizeof cnt);
memset(map,0,sizeof map);
for (int i = 0; i < n; i++)
{
scanf("%s",map[i]);
}
dfs(0,k-1,1);
}
}