#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 1010; char map[N][N]; int visit[N][N], step[N][N];//step记录步数 int n, m, x, y, flag; void BFS(int k) { int i, j, p; i = 1; j = k; p = 1; flag = 0; while (i > 0 && j >0 && i <= n && j <= m && !visit[i][j]) { visit[i][j] = 1; step[i][j] = p;//走到(i,j)时所用步数 p ++;//总共的步数 if (map[i][j] == 'N') { i --; } else if (map[i][j] == 'S') { i ++; } else if (map[i][j] == 'E') { j ++; } else if (map[i][j] == 'W') { j --; } } if (visit[i][j])//形成循环的情况 { flag = 1; x = step[i][j] - 1; y = p - step[i][j]; } else//成功出去的情况 { x = p - 1; } } int main() { int i, j, k; //freopen("1.txt","r", stdin); while (scanf("%d%d%d", &n, &m, &k) != EOF && n && m && k) { memset(map, 0, sizeof(map)); memset(visit, 0, sizeof(visit)); memset(step, 0, sizeof(step)); getchar();//度掉回车 for (i = 1; i <= n; ++i) { for (j = 1; j <= m; ++j) { scanf("%c", &map[i][j]); } getchar();//度掉回车 } BFS(k); if (flag) { printf("%d step(s) before a loop of %d step(s)\n", x, y); } else { printf("%d step(s) to exit\n", x); } } system("pause"); return 0; }
poj 1573 模拟
最新推荐文章于 2019-03-12 20:21:00 发布