本题比较基础,首先建立两个二维数组,一个保存地图,一个保存地图上某点已经走过的次数。
如果第一次走过某点,则增加step;
如果第二次走过某点,则增加loop,减少step;
如果第三次走过某点,则结束。
#include <iostream>
using namespace std;
const int MAX = 1000;
char arr[MAX][MAX]; //地图数组
int track[MAX][MAX]; //路径数组,保存地图上某点已经走过的次数
int main()
{
int row, column, num;
while (cin >> row >> column >> num)
{
if (row == 0 && column == 0)
break;
for (int i = 1; i <= row; i++)
{
for (int j = 1; j <= column; j++)
cin >> arr[i][j];
}
memset(track, 0, sizeof(track)); //初始化路径数组
char ins;
int step = 0, loop = 0;
int i = 1, j = num;
while (i > 0 && i <= row && j > 0 && j <= column)
{
if (track[i][j] == 2) //如果某点已经路过2次,则已经重复走了一圈,结束循环
break;
if (track[i][j] == 1) //如果某点已经路过1次,则开始第一圈循环
{
track[i][j] = 2;
++loop;
--step;
ins = arr[i][j];
switch (ins)
{
case 'N':
i -= 1;
break;
case 'W':
j -= 1;
break;
case 'S':
i += 1;
break;
case 'E':
j += 1;
break;
}
}
else //第一次经过某点
{
++step;
track[i][j] = 1;
ins = arr[i][j];
switch (ins)
{
case 'N':
i -= 1;
break;
case 'W':
j -= 1;
break;
case 'S':
i += 1;
break;
case 'E':
j += 1;
break;
}
}
}
if (loop == 0)
cout << step << " step(s) to exit" << endl;
else
cout << step << " step(s) before a loop of " << loop << " step(s)" << endl;
}
return 0;
}
继续加油。