//就开始做这一题的时候(下面的代码),竟然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");
}
*/
poj 1573 Robot Motion
最新推荐文章于 2022-02-25 21:57:21 发布