对于每组数据,第一行两个数w和h,表示迷宫的行和列(1<=w,h<=10)
接下来w行每行有h个字符用于描述这个迷宫。迷宫的‘.’表示空地,即为可以走的地方。‘*’表示陷阱,即为不能走的地方。迷宫中有一个英文字母,表示机器人的出发点,字母只有’U’,’D’,’L’,’R’四种。分别表示机器人的初始指令是向上,向下,向左,向右。
标签:试题 机试题 arch status 注意 90度 std 获得 for
有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱。他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走。当机器人不能走的时候,也就是下一步会遇到陷阱、迷宫边界或者访问过的格子,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,移动后可获得又一次旋转机会)。请问这个机器人最多可以经过多少个方格。
例如:
5 5
R****
*****
*****
*****
*****
机器人可以经过25个格子,但是
2 3
**L
***
机器人只能经过3个格子。
对于每组数据,第一行两个数w和h,表示迷宫的行和列(1<=w,h<=10)
接下来w行每行有h个字符用于描述这个迷宫。迷宫的‘.’表示空地,即为可以走的地方。‘*’表示陷阱,即为不能走的地方。迷宫中有一个英文字母,表示机器人的出发点,字母只有’U’,’D’,’L’,’R’四种。分别表示机器人的初始指令是向上,向下,向左,向右。
2 3
U..
.*.
4 4
R...
.**.
.**.
....
4
12
1 #include<iostream>
2
3 using namespace std;
4 char map[15][15];
5 int w, h;//U’,’D’,’L’,’R’
6 bool isCanGo(int x, int y, char d){
7 if (d == ‘L‘){
8 if (y - 1 >= 0 && map[x][y - 1] != ‘*‘)
9 return true;
10 }
11 else if (d == ‘R‘){
12 if (y + 1 < h && map[x][y + 1] != ‘*‘)
13 return true;
14 }
15 else if (d == ‘U‘){
16 if (x - 1 >= 0 && map[x-1][y] != ‘*‘)
17 return true;
18 }
19 else if (d == ‘D‘){
20 if (x + 1 < w && map[x+1][y] != ‘*‘)
21 return true;
22 }
23 return false;
24 }
25 int main12313(){
26 while (cin >> w >> h){
27 char d;
28 int posx, posy;
29 for (int i = 0; i < w; i++){
30 cin >> map[i];//这里的输入太坑了,没有空格,每行就是一个输入
31 // R**** *****,注意这里的输入
32 for (int j = 0; j < h; j++){
33 //cin >> map[i][j];
34 if (map[i][j] == ‘U‘ || map[i][j] == ‘D‘ || map[i][j] == ‘L‘ || map[i][j] == ‘R‘){
35 posx = i;
36 posy = j;
37 d = map[i][j];
38 }
39 }
40 }
41 int num = 1,time=1;
42 while (1){
43 if (isCanGo(posx, posy, d)){//走一步,并刷新time的值,走过格子的加一
44 time = 1;
45 num += 1;
46 map[posx][posy] = ‘*‘;
47 if (d == ‘U‘){
48 posx = posx - 1;
49 }
50 else if (d == ‘D‘){
51 posx = posx + 1;
52 }
53 else if (d == ‘L‘){
54 posy -= 1;
55 }
56 else if (d == ‘R‘){
57 posy += 1;
58 }
59 //cout << posx << " " << posy << endl;
60 }
61 else if(time==1){//调整方向,time减一
62 time--;
63 if (d == ‘U‘){
64 d = ‘R‘;
65 }
66 else if (d == ‘D‘){
67 d = ‘L‘;
68 }
69 else if (d == ‘L‘){
70 d = ‘U‘;
71 }
72 else if (d == ‘R‘){
73 d = ‘D‘;
74 }
75 //cout << "convert!" << d << endl;
76 }
77 else{
78 break;
79 }
80 }
81 cout << num << endl;
82 }
83 return 0;
84 }
1021: 机器人走迷宫(2017年中南大学研究生复试机试题 )
标签:试题 机试题 arch status 注意 90度 std 获得 for
原文地址:https://www.cnblogs.com/tangyimin/p/10580698.html