http://poj.org/problem?id=1573
#include <iostream>
using namespace std;
/*
一个容易被忽略的test case
2 2 1
SW
EN
正确输出:
0 step(s) before a loop of 4 step(s)
一个数组存储命令Grid
另一个数组存储走过的步数,出界则直接输出num,遇到循环则输出num-path[r][c]
(如果走到了曾经走过的路径上,一定会进loop)
*/
char grid[15][15];
int path[15][15];
int main() {
int R, C, c;
while (cin >> R >> C >> c && (R+C+c)) {
memset(grid, 0, sizeof(grid));
for (int i = 1; i <= R; ++i)
for (int j = 1; j <= C; ++j)
cin >> grid[i][j];
int r = 1;
int num = 0;
memset(path, -1, sizeof(path));//初始化
bool flag = false;
while (1 <= r && r <= R && 1 <= c && c <= C) {
//是否走到了走过的路径上
if (path[r][c] > -1) {
flag = true;
break;
}
else
path[r][c] = num++;
if (grid[r][c] == 'N')
r--;
else if (grid[r][c] == 'S')
r++;
else if (grid[r][c] == 'E')
c++;
else if (grid[r][c] == 'W')
c--;
}
if (flag)
cout << path[r][c] << " step(s) before a loop of "
<< num - path[r][c] << " step(s)" << endl;
else
cout << num << " step(s) to exit" << endl;
}
return 0;
}