思路
类似于走迷宫这样基本的搜索题,不过每一格的方向都已经固定,所以直接模拟一遍就可以了。
代码
#include <iostream>
#include <cstring>
using namespace std;
const int maxn = 20;
int count[maxn][maxn];
int n, m, k;
char dir[maxn][maxn];
void dfs(int curx, int cury)
{
int nCount = 0;
memset(count, -1, sizeof(count));
while(true)
{
if(curx>n || cury>m || !curx || !cury)
{
printf("%d step(s) to exit\n", nCount);
return;
}
if(count[curx][cury]>=0)
{
printf("%d step(s) before a loop of %d step(s)\n", count[curx][cury], nCount-count[curx][cury]);
return;
}
count[curx][cury] = nCount;
if(dir[curx][cury]=='N') curx--;
else if(dir[curx][cury]=='S') curx++;
else if(dir[curx][cury]=='W') cury--;
else if(dir[curx][cury]=='E') cury++;
nCount++;
}
}
int main()
{
while(scanf("%d%d", &n, &m)&&n)
{
scanf("%d", &k);
for(int i=1; i<=n; i++)
scanf("%s", dir[i]+1);
dfs(1, k);
}
return 0;
}