返回目录

题目一览:

1.迷宫

2.跳蚱蜢

3.魔方状态

4.方格分割

5.字母组串

6.最大公共子串

7.正则问题

8.包子凑数

9.分巧克力

10.油漆面积

1.迷宫

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

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

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

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

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

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

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

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

2017-第八届蓝桥杯大赛个人赛省赛(软件类)真题 C大学A组

思路:模拟即可。走出判定:出界;走不出判定:走到了原来走过的点。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 string s[101];
 5 bool flag, vis[11][11], Break;
 6 int Ans;
 7 
 8 void dfs(int x, int y) {
 9     if(x<0 || x>9 || y<0 || y>9) { // 走出 
10         flag = true;
11         return ;
12     }
13     if(vis[x][y]) { // 走到了走过的点 
14         Break = true;
15         return ;
16     }
17     if(Break || flag) return;
18     vis[x][y] = true; // 标记 
19     if(s[x][y] == 'U') x--; // 下一步 
20     else if(s[x][y] == 'D') x++;
21     else if(s[x][y] == 'L') y--;
22     else if(s[x][y] == 'R') y++;
23     dfs(x, y);
24 }
25 
26 int main() {
27     for(int i=0; i<10; ++i) 
28         cin >> s[i];
29     for(int i=0; i<10; ++i) {
30         for(int j=0; j<10; ++j) {
31             flag = Break = false;// 每次都要初始化 
32             memset(vis, false, sizeof(vis)); 
33             dfs(i, j);
34             if(flag) Ans++;
35         }
36     }
37     printf("%d\n", Ans);
38     return 0;
39 }
1.迷宫

相关文章:

  • 2022-12-23
  • 2021-07-15
  • 2021-06-17
  • 2021-11-13
  • 2022-12-23
  • 2021-11-07
  • 2021-11-12
  • 2021-05-20
猜你喜欢
  • 2021-06-14
  • 2022-01-03
  • 2021-08-16
  • 2022-01-18
  • 2021-11-07
  • 2021-07-14
  • 2022-03-10
相关资源
相似解决方案