//就开始做这一题的时候(下面的代码),竟然WA了两次:内存超出! 主要是写代码的时候写的复杂了 //以下是用一个数组储存已经行走过的点和所需要的步数!这样就简化了不少! #include "iostream" #include "string" #include "cctype" using namespace std; char path[12][12]; int havewalk[12][12]; int main() { int r, c, pos, i, j, step, forwardi, forwardj; while (cin >> r >> c >> pos) { if (r == 0 && c == 0 && pos == 0) break; step = 0; memset(path, '0', sizeof(path)); memset(havewalk, 0, sizeof(havewalk)); for (i = 1; i <= r; i++) for (j = 1; j <= c; j++) cin >> path[i][j]; i = 1, j = pos; while (path[i][j] != '0' && havewalk[i][j] == 0) { forwardi = i; forwardj = j; if (path[i][j] == 'E') { step++; havewalk[i][j] = step; j++; } else if (path[i][j] == 'W') { step++; havewalk[i][j] = step; j--; } else if (path[i][j] == 'S') { step++; havewalk[i][j] = step; i++; } else if (path[i][j] == 'N') { step++; havewalk[i][j] = step; i--; } } if (path[i][j] == '0' && havewalk[i][j] == 0) cout << havewalk[forwardi][forwardj] << " step(s) to exit" << endl; else cout << havewalk[i][j] - 1 << " step(s) before a loop of " << havewalk[forwardi][forwardj] - havewalk[i][j] + 1<< " step(s)" << endl; } system("pause"); } /* 3 6 5 NEESWE WWWESS SNWWWW 4 5 1 SESWE EESNW NWEEN EWSEN 2 2 1 ES NW 0 0 0 */ /*#include "iostream" #include "string" #include "vector" using namespace std; char path[12][12]; struct Info { char x, y, s; }; vector<Info> v; int main() { int r, c, pos, i, j, k, steps, size; Info temp; bool flag1, flag2; while (cin >> r >> c >> pos && r && c && pos) { memset(path, '0', sizeof(path)); steps = 0; v.clear(); flag1 = flag2 = false; for (i = 1; i <= r; i++) for (j = 1; j <= c; j++) cin >> path[i][j]; i = 0, j = pos; path[i][j] = 'S'; while (path[i][j] != '0') { if (flag2) break; if (path[i][j] == 'E') { if (!flag1) { path[i][j] = '0'; flag1 = true; } j++; steps++; temp.x = i, temp.y = j, temp.s = steps; size = v.size(); for (k = 0; k < size; k++) { if (v[k].x == temp.x && v[k].y == temp.y) { cout << v[k].s-1 << " step(s) before a loop of " << temp.s - v[k].s << " step(s)" << endl; flag2 = true; break; } else v.push_back(temp); } if (size == 0) v.push_back(temp); } else if (path[i][j] == 'S') { if (!flag1) { path[i][j] = '0'; flag1 = true; } i++; steps++; temp.x = i, temp.y = j, temp.s = steps; size = v.size(); for (k = 0; k < size; k++) { if (v[k].x == temp.x && v[k].y == temp.y) { cout << v[k].s-1 << " step(s) before a loop of " << temp.s - v[k].s << " step(s)" << endl; flag2 = true; break; } else v.push_back(temp); } if (size == 0) v.push_back(temp); } else if (path[i][j] == 'W') { if (!flag1) { path[i][j] = '0'; flag1 = true; } j--; steps++; temp.x = i, temp.y = j, temp.s = steps; size = v.size(); for (k = 0; k < size; k++) { if (v[k].x == temp.x && v[k].y == temp.y) { cout << v[k].s-1 << " step(s) before a loop of " << temp.s - v[k].s << " step(s)" << endl; flag2 = true; break; } else v.push_back(temp); } if (size == 0) v.push_back(temp); } else if (path[i][j] == 'N') { if (!flag1) { path[i][j] = '0'; flag1 = true; } i--; steps++; temp.x = i, temp.y = j, temp.s = steps; size = v.size(); for (k = 0; k < size; k++) { if (v[k].x == temp.x && v[k].y == temp.y) { cout << v[k].s - 1 << " step(s) before a loop of " << temp.s - v[k].s << " step(s)" << endl; flag2 = true; break; } else v.push_back(temp); } if (size == 0) v.push_back(temp); } } if (!flag2) cout << steps - 1 << " step(s) to exit" << endl; } system("pause"); } */