题目描述
迷宫导航是人工智能领域一个常见的问题,迷宫中有走廊和墙壁,机器人可以通过走廊,但不能穿过墙壁。
输入
输入数据文件包含多个测试数据。
每个测试数据的第一行是两个整数:M和N,表示迷宫的大小,其中M表示迷宫的行数,N表示迷宫的列数,这两个整数的大小都不超过60。
接下来有M行,每行有N个字符,描绘了这个迷宫。其中空格字符表示走廊,星号字符表示墙壁。迷宫没有出口。
接下来一行是两个整数,表示机器人的初始位置。初始时,机器人是朝北的。
测试数据中剩余的数据表示机器人接收到的命令,用字符表示,其中可能包含空格。有效的命令字符及其代表的含义为:
R:顺时针旋转90度。
L:逆时针旋转90度。
F:往前移动一步,如果前方位置为墙壁,则不移动。
Q:退出程序。每个测试数据中指令序列的最后一个字符为Q,此时应输出机器人当前位置和朝向。
输入数据文件中的测试数据一直到文件尾。
输出
对每个测试数据,输出机器人最终的位置和朝向(N,W,S或E),表示位置的行和列的整数及表示朝向的字符用空格隔开。
样例输入 复制
7 8
********
* * * **
* * *
* * ** *
* * * *
* * **
********
2 4
RRFLFF FFR
FF
RFFQ
样例输出 复制
5 6 W
#include<iostream>
using namespace std;
int main()
{int m;int n;while(scanf("%d%d",&m,&n)!=EOF){char d[4] = {'N','W','S','E'};//北 西 南 东 上北下南左西右东//n0 w1 s2 e3char a[65][65];getchar();for(int i=1;i<=m;i++) {for(int j=1;j<=n;j++) {scanf("%c",&a[i][j]);}getchar();}int x = 0;int y = 0;cin>>x>>y;int index = 0;char op;while(scanf("%c",&op)!=EOF){if(op=='Q'){cout<<x<<' '<<y<<' '<<d[index];break;}if(op=='R'){if(index == 0)index = 3;else if(index == 1)index = 0;else if(index == 2)index = 1;else if(index == 3)index = 2;}if(op=='L'){if(index == 0)index = 1;else if(index == 1)index = 2;else if(index == 2)index = 3;else if(index == 3)index = 0;}if(op=='F'){if(index == 0){if(a[x-1][y]==' ')x--;elsecontinue;}else if(index == 1){if(a[x][y-1]==' ')y--;elsecontinue;}else if(index == 2){if(a[x+1][y]==' ')x++;elsecontinue;}else if(index == 3){if(a[x][y+1]==' ')y++;elsecontinue;}}}}return 0;
}