题意是给定初始位置在一个迷宫中按照要求前进,判断多少步能离开迷宫或者多少步会走入一个长达多少步的循环。
按要求模拟前进的位置,对每一步在 vis[ ] 数组中进行已走步数的记录,走出去或走到已走过的位置结束,计算出所要求的步数即可。
要注意的一点是记得 scanf 在 %c 的时候会读入空格和换行的,而 %s 读入的时候以空格和换行作为读入结束的标志。简单起见直接用 cin / cout 了......
代码如下:
#include <bits/stdc++.h>
using namespace std;
int vis[][];
char mp[][];
int main()
{
std::ios::sync_with_stdio(false);
int n,m,x,y,cnt;
while(cin >> n >> m)
{
if(!(n||m)) break;
memset(vis,,sizeof(vis));
cin >> y;
for(int i = ; i <= n; ++i)
for(int j = ; j <= m; ++j)
cin >> mp[i][j];
x = ;
cnt = ;
while()
{
if(x<||x>n||y<||y>m)
{
cout << cnt- << " step(s) to exit\n";
break;
}
if(vis[x][y])
{
cout << vis[x][y]- << " step(s) before a loop of " << cnt-vis[x][y] << " step(s)\n";
break;
}
vis[x][y] = cnt++;
if(mp[x][y] == 'N') --x;
else if(mp[x][y] == 'W') --y;
else if(mp[x][y] == 'E') ++y;
else if(mp[x][y] == 'S') ++x;
}
}
return ;
}