题目一览:
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
思路:模拟即可。走出判定:出界;走不出判定:走到了原来走过的点。
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 }