蓝桥杯 迷宫

标题:迷宫

X星球的一处迷宫游乐场建在某个小山坡上。
它是由10x10相互连通的小房间组成的。

房间的地板上写着一个很大的字母。
我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。

X星球的居民有点懒,不愿意费力思考。
他们更喜欢玩运气类的游戏。这个游戏也是如此!

开始的时候,直升机把100名玩家放入一个个小房间内。
玩家一定要按照地上的字母移动。

迷宫地图如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------

请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。

请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。

如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:

 

思路: 此题难点在于怎么判断该玩家是否会陷入死循环,从而走不出来。 我们可以设置一个vis[12][12],vis[i][j]用于标记地图上的某点(i, j)走过的次数,当改点走过的次数大于1时,说明又绕了回来,也即陷入死循环走不出来。

 1 #include<iostream> 
 2 #include<algorithm>
 3 #include<queue>
 4 #include<cstring>
 5 
 6 using namespace std;
 7 
 8 char mp[12][12] = {
 9     "UDDLUULRUL",
10     "UURLLLRRRU",
11     "RRUURLDLRD",
12     "RUDDDDUUUU",
13     "URUDLLRRUU",
14     "DURLRLDLRL",
15     "ULLURLLRDU",
16     "RDLULLRDDD",
17     "UUDDUDUDLL",
18     "ULRDLUURRR" };
19 
20 int vis[12][12];
21 int x, y;
22 int result;
23 
24 int main()
25 {
26     for (int i = 0; i < 10; ++i)
27     {
28         for (int j = 0; j < 10; ++j)
29         {
30             memset(vis, 0, sizeof(vis));    //一定要记得重置!
31             x = i;
32             y = j;
33             ++vis[x][y];
34             while (1)
35             {
36                 if (mp[x][y] == 'U')
37                     --x;
38                 else if (mp[x][y] == 'D')
39                     ++x;
40                 else if (mp[x][y] == 'L')
41                     --y;
42                 else if (mp[x][y] == 'R')
43                     ++y;
44 
45                 if (x < 0 || x >= 10 || y < 0 || y >= 10)  //走出来了
46                 {
47                     ++result;
48                     break;
49                 }
50                 
51                 ++vis[x][y];
52                 
53                 if (vis[x][y] > 1)    //又绕了回来,即陷入了死循环走不出来
54                     break;
55             }
56         }
57     }
58 
59     cout << result << endl;
60 
61     return 0;
62 }

答案: 31

原文地址:https://www.cnblogs.com/FengZeng666/p/10496905.html