码迷,mamicode.com
首页 > 其他好文 > 详细

1021: 机器人走迷宫(2017年中南大学研究生复试机试题 )

时间:2019-03-22 20:14:50      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:试题   机试题   arch   status   注意   90度   std   获得   for   

1021: 机器人走迷宫

时间限制: 1 Sec  内存限制: 128 MB
提交: 339  解决: 71
[提交] [状态] [讨论版] [命题人:外部导入]

题目描述

有一个愚蠢的机器人走进一个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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!